/*考えたこと A = 0のときの解き方 x1 = 50だとB > 50で50だらけになる。x1 = 100としてr1が返ると、100 - r1 = q1B となる。 100 - r1 ≡ 0 (mod B) -> 99 - r1 ≡ -1 (mod B) ≡ B - 1 (mod B) より、r2 = B - 1。(r1 < 99よりvalidな質問) 一般の解き方 1回目の答えをr1として100, 99 - r1を聞くと一意に定まるのでは?と思ったが数学的に証明できていない。 実験的には1≦A 0≦A using namespace std; int query(int x) { cout << "? " << x << endl; cout.flush(); int r; cin >> r; return r; } void answer(int a, int b) { cout << "! " << a << " " << b << endl; } int main() { int r1 = query(100); if (r1 == 99) { answer(99, 100); return 0; } int r2 = query(99 - r1); for (int a = 0; a <= 100; a++) { for (int b = a + 1; b <= 100; b++) { if ((100 + a) % b == r1 && (99 - r1 + a) % b == r2) { answer(a, b); return 0; } } } return 0; }