1407C. Chocolate Bunny(交互,推导)

交互题还是很难搞呀~

C. Chocolate Bunny(交互,推导)

a i % a j = x 假设a_i\%a_j=x

a j % a i = y a_j\%a_i=y

其实就能得到一些东西了

a i > a j 假设a_i>a_j

y = a j 那么y=a_j

x < a j 那么x<a_j

x < y a j = y 那么x<y且a_j=y

, ( i , j ) x , ( j , i ) y 所以,经过(i,j)得到x,经过(j,i)得到y

x y a i a j x和y的较大值就是a_i和a_j的较小值

y , a j % a i = y 比如y比较大,那么通过a_j\%a_i=y

a j = y 所以唯一确定a_j=y

, 2 综上所诉,2次操作可以求得两个数中的较小值

2 n 2 n 1 , n ( n ) 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);
}

猜你喜欢

转载自blog.csdn.net/jziwjxjd/article/details/108488100