本地样例一遍过,交到 CF 上面过不了样例
#include <bits/stdc++.h>
using namespace std;
int arr[10]={0,1,2,2,2,2,1,1,0,0},lk,rk,t,n,p,rp,m[1005];
vector<int> v;
int main() {
scanf("%d",&t);
while (t--) {
scanf("%d",&n);
for (int i=1;i<=n;i++) m[i]=0;
int l=1,r=n;
while (r-l>2) {
int mid=(l+r)>>1;
cout << "? " << mid-l+2 << " ";
for (int i=l;i<=mid;i++) cout << i << " ";
cout << 1 << endl;
cin >> p;
if (p!=0) r=mid;
else {
cout << "? " << r-mid+1 << " ";
for (int i=mid+1;i<=r;i++) cout << i << " ";
cout << mid+1 << endl;
cin >> p;
if (p!=0) l=mid+1;
else {
cout << "? 2 " << mid << " " << mid+1 << endl;
cin >> p;
int L,R;
if (p==1) L=1,R=2;
else L=2,R=1;
for (int i=l;i<=mid;i++) m[i]=L;
for (int i=mid+1;i<=r;i++) m[i]=R;
rp=mid+p;
break;
}
}
}
if (r-l==2) {
cout << "? 10 ";
for (int i=0;i<10;i++) cout << l+arr[i] << " ";
cout << endl;
cin >> p;
int i=l;
if (p==8) {
m[i]=1;
m[i+1]=1;
m[i+2]=2;
lk=i;
rk=i+2;
}
if (p==7) {
m[i]=1;
m[i+1]=2;
m[i+2]=2;
lk=i;
rk=i+2;
}
if (p==11) {
m[i]=1;
m[i+1]=2;
m[i+2]=1;
lk=i;
rk=i+1;
}
if (p==10) {
m[i]=2;
m[i+1]=1;
m[i+2]=2;
lk=i+1;
rk=i+2;
}
if (p==16) {
m[i]=2;
m[i+1]=2;
m[i+2]=1;
lk=i+2;
rk=i;
}
if (p==14) {
m[i]=2;
m[i+1]=1;
m[i+2]=1;
lk=i+1;
rk=i;
}
}
else {
cout << "? 2 " << l << " " << r << endl;
cin >> p;
if (p==0) {
m[l]=2;
m[r]=1;
lk=r;
rk=l;
}
else {
m[l]=1;
m[r]=2;
lk=l;
rk=r;
}
}
for (int i=1;i<=n;i++) {
if (m[i]==0) v.push_back(i);
}
for (int i=0;i<v.size();i+=3) {
cout << "? 10 ";
for (int j=0;j<10;j++) cout << v[(i+arr[j])%v.size()] << " ";
cout << endl;
cin >> p;
if (p==8) {
m[v[i]]=1;
m[v[(i+1)%v.size()]]=1;
m[v[(i+2)%v.size()]]=2;
lk=v[i];
rk=v[(i+2)%v.size()];
}
if (p==7) {
m[v[i]]=1;
m[v[(i+1)%v.size()]]=2;
m[v[(i+2)%v.size()]]=2;
lk=v[i];
rk=v[(i+2)%v.size()];
}
if (p==11) {
m[v[i]]=1;
m[v[(i+1)%v.size()]]=2;
m[v[(i+2)%v.size()]]=1;
lk=v[i];
rk=(i+1)%v.size();
}
if (p==10) {
m[v[i]]=2;
m[v[(i+1)%v.size()]]=1;
m[v[(i+2)%v.size()]]=2;
lk=v[(i+1)%v.size()];
rk=v[(i+2)%v.size()];
}
if (p==16) {
m[v[i]]=2;
m[v[(i+1)%v.size()]]=2;
m[v[(i+2)%v.size()]]=1;
lk=v[(i+2)%v.size()];
rk=v[i];
}
if (p==14) {
m[v[i]]=2;
m[v[(i+1)%v.size()]]=1;
m[v[(i+2)%v.size()]]=1;
lk=v[(i+1)%v.size()];
rk=v[i];
}
if (p==0) {
cout << "? 2 " << lk << " " << v[i] << endl;
if (p==1) {
m[v[i]]=2;
m[v[(i+1)%v.size()]]=2;
m[v[(i+2)%v.size()]]=2;
}
if (p==0) {
m[v[i]]=1;
m[v[(i+1)%v.size()]]=1;
m[v[(i+2)%v.size()]]=1;
}
}
}
cout << "! ";
for (int i=1;i<=n;i++) {
if (m[i]==1) cout << "(";
else cout << ")";
}
cout << endl;
}
}