如题,学习了第一篇题解的思想与读入输出处理但是依旧还是不停的 Idleness limit exceeded on test 4
。
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n, k;
int query(int start,int end)
{
int ans = 0, x;
int mid = (start + end) / 2, rest = k - (end - start + 1) / 2;
vector<int> temp;
for (int i = 1; i <= n && rest;i++)
{
if(i>=start && i<=end)
continue;
rest--;
temp.push_back(i);
}
cout << "?";
for (int i = start; i <= mid;i++)
cout << " " << i;
for (int i = 0; i < temp.size();i++)
cout << " " << temp[i];
cout << endl;
cin >> x;
ans ^= x;
cout << "?";
for (int i = mid + 1; i <= end; i++)
cout << " " << i;
for (int i = 0; i < temp.size();i++)
cout << " " << temp[i];
cout << endl;
cin >> x;
ans ^= x;
return ans;
}
int main()
{
cin >> n >> k;
if(n%2==1 && k%2==0)
{
cout << "-1";
return 0;
}
int left = n % k;
if(left%2==1)
left += k;
int ans = 0, x;
for (int i = left + 1; i <= n; i += k)
{
cout << "?";
for (int j = 1; j <= k;j++)
cout << " " << i + j - 1;
cout << endl;
cin >> x;
ans ^= x;
}
int place = 1;
while(place<=left)
{
ans ^= query(place, min(place + 2 * k - 1, left));
place += 2 * k;
}
cout << "! " << ans;
return 0;
}