洛谷 P11145 Strange Homura Game 题解
题目传送门
题号真臭
一、大致思路
这道题和前面那道 B1 差别挺大,所以本蒟蒻只 A 了这道 B2。
首先有个数字 \(m\),你需要用两次输出来猜 \(m\)。
由于 \(m\le10^{17},x\le4\times10^{18}\),输出的是 \(x\bmod m\) 的值,我们假设 \(x \bmod m=0\),那么显然 \((x-1)\bmod m=m-1\),只要将 \(m-1\) 的值增加 \(1\) 即可计算出 \(m\)。
由于题目告诉你只能猜两次,我们就要在第一次让 \(x \bmod m=0\),但这样肯定是不行的,但是 \(x-(x\bmod m)\) 肯定是 \(m\) 的倍数,这样第二次的 \(x\) 肯定为第一次的 \(x-(x\bmod m)-1\),这样输出的结果加一就是正确答案。
我们让第一次的询问为 \(x\) 的上限范围 \(10^{18}\),再根据第一次的回答算出第二次的 \(x\)。
二、AC 代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
long long n=0,k=0;
cout<<"? 1000000000000000000"<<std::endl;//10^18
cin>>n;
cout<<"? "<<1000000000000000000-n-1<<std::endl;
cin>>n;
cout<<"! "<<n+1<<std::endl;
}
return 0;
}

浙公网安备 33010602011771号