这种题做法是可以套公式的:
先用操作改出来一个特殊的结构,先组合操作,检查能得到什么东西,找找规律。这个题里可以让所有a互不相同
然后再组合操作,检查都问一遍/选子集问一遍能得到什么。尝试简单的代码实现。
最终可以1k写完,我想代码应该可以更加简单说明算法流程
int n;
bool vis[maxn],pr[maxn];
int ops(int i){cout<<"? "<<i<<endl;cin>>i;return i;}
void sol(){
cin>>n;
for(int i=2;i<=n;++i)while(ops(i));
for(int i=1;i<=n;++i)vis[i]=pr[i]=0;
for(int i=2;i<=n+1;++i){
for(int j=2;j<=n;++j)if(!vis[j]){
int cr=ops(j);
if(cr==0&&pr[j])vis[j]=1,ops(j);
pr[j]=cr;
}
}
ops(1),ops(1);cout<<'!'<<endl;
}