줄다리기

시간 제한1초메모리 제한128 MB

요약
가중치가 있는 두 수열을 각각 세 개의 연속 구간으로 나누고 대응 구간 무게 차의 최댓값을 최소화하는 분할을 찾습니다.
난이도

어려움10점 중 8점

유형
이분 탐색, 누적 합, 투 포인터
정답자
아직 제출이 없습니다

문제

A 마을과 B 마을의 주민들이 줄다리기 시합을 하려고 한다. 각 마을의 사람들은 이미 한 줄로 서 있으며, 이를 각각 A줄과 B줄이라고 부른다. 두 줄을 각각 순서를 유지한 채 연속한 세 개의 비어 있지 않은 단위 줄 A1, A2, A3과 B1, B2, B3으로 나눈다. 시합은 A1과 B1, A2와 B2, A3과 B3이 맞붙는 세 번으로 진행된다.

단위 줄의 무게는 그 단위 줄에 속한 사람들의 몸무게 합이다. 각 줄에서 사람들의 원래 순서는 바꿀 수 없다. 또한 대응하는 각 단위 줄 쌍마다 두 무게의 차이는 50 이하여야 한다.

어떤 나누기에서 세 쌍의 무게 차이 중 가장 큰 값을 줄다리기 값이라고 하자. 위 조건을 만족하는 나누기 중 줄다리기 값이 가장 작은 나누기를 구해야 한다.

입력

첫째 줄에 A줄과 B줄의 사람 수를 나타내는 정수 N과 M이 주어진다.

둘째 줄에는 A줄에 선 사람들의 몸무게 N개가 순서대로 주어진다. 셋째 줄에는 B줄에 선 사람들의 몸무게 M개가 순서대로 주어진다.

N과 M은 3 이상 30,000 이하의 정수이다. 각 몸무게는 20 이상 100 이하의 정수이다.

출력

조건을 만족하는 나누기가 없으면 첫째 줄에 -1을 출력한다.

나누기가 존재하면 두 줄을 출력한다. 첫째 줄에는 A1, A2, A3에 속한 사람 수를 차례대로 출력한다. 둘째 줄에는 B1, B2, B3에 속한 사람 수를 차례대로 출력한다.

줄다리기 값이 최소인 나누기가 여러 개라면 그중 아무거나 하나를 출력해도 된다.

예제2

  1. 예제 1

    입력
    10 8
    62 34 54 26 65 40 30 29 35 32
    44 45 66 76 35 60 34 60
    
    예상 출력
    3 4 3
    3 3 2
    
  2. 예제 2

    입력
    7 5
    20 20 20 60 40 30 20
    61 32 30 71 22
    
    예상 출력
    3 1 3
    1 2 2