题解:CF1867E1 Salyg1n and Array (simple version)
简单题
题目传送门
思路
首先,必须知道
作图。
先问
因为区间长度为
那么总次数至多为
代码也比较短。
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int T,n,k,cnt,ps,ans;
cin>>T;
while(T--){
cin>>n>>k;
cnt=ps=ans=0;
int sum=(n-k)/2,x,js;
cnt=sum/k,ps=sum%k;
cout<<"? "<<1<<endl;
cin>>x,ans^=x,js=k+1;
if(ps!=0){
cout<<"? "<<js-(k-ps)<<endl;
cin>>x,ans^=x,js=js+ps;
cout<<"? "<<js-(k-ps)<<endl;
cin>>x,ans^=x,js=js+ps;
}for(int i=1;i<=cnt*2;i++){
cout<<"? "<<js<<endl;
cin>>x,ans^=x,js+=k;
}cout<<"! "<<ans<<endl;
}
}