rt,参考的第五篇题解
#include <bits/stdc++.h>
using namespace std;
int n, m, q;
int query(int x, int y) {
if(x == y) return 0;
cout << "? " << x << ' ' << y << endl;
int res; cin >> res;
return res;
}
vector <int> ans, v[95][2];
int rl;
int main() {
cin >> n >> m >> q;
for(int i = 1; i <= 90; i++) {
int bg = i * 11 - 10, ed = bg + 10;
v[i][0].push_back(bg);
for(int j = bg + 1; j <= ed; j++)
v[i][query(bg, j)].push_back(j);
if(v[i][0].size() == 11) rl = bg;
}
for(int i = 1; i <= 90; i++) {
int bg = i * 11 - 10;
int op = query(rl, bg);
for(int x : v[i][!op]) ans.push_back(x);
}
for(int i = 991; i <= 1000; i++)
if(query(rl, i)) ans.push_back(i);
cout << "! ";
for(int x : ans) cout << x << ' ';
return 0;
}