题解:P11145 Strange Homura Game

naughty-naught / 2024-10-15 / 原文

Problem Link

Strange Homura Game

题意

让你猜测一个数 \(n\),你只能输出两次,每次输出一个数 \(x\),返回 \(x \bmod n\)

Solution

令输入的数为 \(A,B\),输出的数为 \(a,b\),答案为 \(n\)

一开始想的是 CRT,但只能询问 \(2\) 次。

发现输入的值是经过 \(\bmod n\) 的,已知 \((A-a) \bmod n == 0\),所以 \((A-a-1) \bmod n = n-1\)

那就非常简单了,\(B = A-a-1,n=b+1\)

Code

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
ll A = 100000000000000000, a, B, b, n;

int main()
{
    int _;
    cin >> _;
    while(_--)
    {
        cout << "? " << A << endl;
        cin >> a; B = A-a-1;
        cout << "? " << B << endl;
        cin >> b; n = b+1;
        cout << "! " << n << endl;
    }
    return 0;
}

Tips

记得开 long long