交互题还是很难搞呀~
C. Chocolate Bunny(交互,推导)
假设ai%aj=x
aj%ai=y
其实就能得到一些东西了
假设ai>aj
那么y=aj
那么x<aj
那么x<y且aj=y
所以,经过(i,j)得到x,经过(j,i)得到y
x和y的较大值就是ai和aj的较小值
比如y比较大,那么通过aj%ai=y
所以唯一确定aj=y
综上所诉,2次操作可以求得两个数中的较小值
2n−2次操作得到n−1个数,剩下那个是n(因为n永远不会当作较小值求出来)
#include <bits/stdc++.h>
using namespace std;
int a[10009];
void print(int q,int w){
cout << "? " << q << " " << w << '\n';
}
int main()
{
int n;
cin >> n;
int last=1;
for(int i=2;i<=n;i++)
{
int q,w;
print(last,i);
fflush(stdout);
cin >> q;
print(i,last);
fflush(stdout);
cin >> w;
if( q<w ) a[i]=w; //较大值不改变
else a[last]=q,last=i;
}
a[last]=n;
cout << "! ";
for(int i=1;i<=n;i++)
cout << a[i] << " ";
fflush(stdout);
}