성현이는 N명의 알고리즘 동아리 부원들에게 총 M개의 선물을 주기로 했다.
하지만, 부원들에게 선물을 그냥 주는 건 재미없다고 생각한 성현이는 아래와 같은 방식으로 선물을 나눠주기로 했다.
우선, N명의 부원들에게 1부터 N까지의 번호를 매긴 뒤, 부원들에게 각각 A_1, A_2, ..., A_N개의 선물을 나눠준다. 그리고, 각 부원이 받아야 하는 선물의 개수 B_1, B_2, ..., B_N 을 알려준다.
이후, N명의 부원들은 아래의 연산만을 적절히 사용해서 본인이 받아야 하는 선물의 개수를 맞춰나가야 한다. 단, 시간이 너무 오래 걸리면 안 되기 때문에, 두 연산을 합해서 총 2N번 이하로 사용해야 한다.
+ i x : i 번 부원을 제외하고, 현재 선물을 가장 많이 가지고 있는 부원을 j 라고 하자. 이때, j 번 부원이 i 번 부원에게 선물 x 개를 준다.
- i x : i 번 부원을 제외하고, 현재 선물을 가장 적게 가지고 있는 부원을 j 라고 하자. 이때, i 번 부원이 j 번 부원에게 선물 x 개를 준다.
두 경우 모두, 조건을 만족하는 j가 여럿 있다면 그중 번호가 가장 작은 부원이 선택된다.
성현이는 위와 같은 서프라이즈를 준비한 뒤, 검증을 위해 프로그램을 짜서 미리 가능한 결과 중 하나를 만들어보기로 했다.