아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

사탕 먹이기

시간 제한2초메모리 제한512 MB

요약
i번 사탕의 효과 (s_i, t_i)가 복소수 점화식으로 주어질 때, 일부를 골라 합이 (X, Y)가 되게 하는 부분집합을 찾아 출력한다.
난이도

어려움10점 중 9점

유형
정수론, 수학, 그리디, 비트 연산
정답자
아직 제출이 없습니다

문제

당신은 슬라임을 키우는 게임을 하고 있다. 슬라임은 부드러움과 투명도라는 두 정수 매개변수를 가진다. 이 게임에는 11부터 1010010^{100}까지 번호가 붙은 1010010^{100}종류의 사탕이 있고, ii번째 종류의 사탕을 슬라임에게 먹이면 부드러움과 투명도가 각각 s_is\_i와 t_it\_i만큼 증가한다. 여기서 s_is\_i와 t_it\_i는 AA와 BB를 정수로 하여 다음 식으로 계산된다.

  • (s_1,t_1)=(1,0)(s\_1, t\_1) = (1, 0)
  • 각 2≤i≤101002 \le i \le 10^{100}에 대해 (s_i,t_i)=(As_i−1−Bt_i−1,Bs_i−1+At_i−1)(s\_i, t\_i) = (As\_{i-1} - Bt\_{i-1}, Bs\_{i-1} + At\_{i-1})

또한 슬라임은 새로운 종류의 사탕을 먹는 것을 좋아한다. 따라서 각 종류의 사탕은 최대 한 번만 먹일 수 있다.

처음에 슬라임의 부드러움과 투명도는 모두 0이다. 목표는 슬라임에게 0개 이상의 사탕을 먹여서 슬라임의 부드러움과 투명도가 각각 XX와 YY가 되도록 하는 것이다. 이것이 가능한지 판별하고, 가능하다면 그러한 방법을 하나 찾아라.

첫 번째 예시 입력에서 처음 네 종류의 사탕의 특성은 다음과 같다.

  • (s_1,t_1)=(1,0)(s\_1, t\_1) = (1, 0)
  • (s_2,t_2)=(2,−1)(s\_2, t\_2) = (2, -1)
  • (s_3,t_3)=(3,−4)(s\_3, t\_3) = (3, -4)
  • (s_4,t_4)=(2,−11)(s\_4, t\_4) = (2, -11)

첫 번째, 두 번째, 네 번째 종류의 사탕을 슬라임에게 먹이면 슬라임의 부드러움과 투명도는 각각 1+2+2=51 + 2 + 2 = 5와 0+(−1)+(−11)=−120 + (-1) + (-11) = -12가 된다.

입력

입력은 여러 데이터셋으로 이루어진다. 각 데이터셋은 다음 형식으로 주어진다.

AA BB XX YY

각 데이터셋은 네 정수 AA, BB, XX, YY를 포함하는 한 줄로 이루어진다. −100≤A≤100-100 \le A \le 100, −100≤B≤100-100 \le B \le 100, −1016≤X≤1016-10^{16} \le X \le 10^{16}, −1016≤Y≤1016-10^{16} \le Y \le 10^{16}, ∣A∣+∣B∣≥2|A| + |B| \ge 2라고 가정할 수 있다.

입력의 끝은 네 개의 0으로 이루어진 한 줄로 나타난다. 데이터셋의 수는 200을 넘지 않는다.

출력

각 데이터셋에 대해 목표를 달성할 수 없으면 −1-1을 한 줄에 출력한다. 그렇지 않으면 슬라임에게 먹인 사탕 종류의 수를 mm이라 하고, 첫 줄에 mm을 출력한다. 그런 다음 각 1≤k≤m1 \le k \le m에 대해 (k+1)(k+1)번째 줄에 먹인 사탕 종류 중 kk번째로 작은 번호를 출력한다.

정답이 여러 개면 그중 아무거나 출력해도 된다.

예제1

  1. 예제 1

    입력
    2 -1 5 -12
    2 0 33 0
    -10 0 123 0
    -4 7 143800796 -5765753
    0 0 0 0
    
    예상 출력
    3
    1
    2
    4
    2
    1
    6
    -1
    1
    10