题解:CF2155D Batteries
这题不是 PKUWC2025 D1T1 吗?
Question
给定
Solution
受到上面题的启发,我们考虑把电池分为
因为每个块是尽量均分的,因此我们每次不断合并两个小块为一个大块,这样一次就需要枚举两个小块询问一次。对于一个
那么我们可以让
Code
#include<bits/stdc++.h>
using ll = long long;
#define For(i,j,k) for(int i = j;i <= k;i++)
using namespace std;
void sol(){ll n;cin >> n;
auto qry = [&](ll u,ll v){cout << u << " " << v << endl;
fflush(stdout);ll o;cin >> o;return o == 1;};
for(ll i = 1;i < n;i <<= 1) for(ll j = 0;j < n;j += i << 1) For(l,j,min(i + j,n) - 1)
For(r,min(i + j,n),min(j + i * 2,n) - 1) if(qry(l + 1,r + 1)) return;
}int main(){ll T;cin >> T;while(T--) sol();return 0;}