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

   日期:2020-09-12     浏览:88    评论:0    
核心提示:交互题还是很难搞呀~C. Chocolate Bunny(交互,推导)假设ai%aj=x假设a_i\%a_j=x假设ai​%aj​=xaj%ai=ya_j\%a_i=yaj​%ai​=y其实就能得到一些东西了假设ai>aj假设a_i>a_j假设ai​>aj​那么y=aj那么y=a_j那么y=aj​那么x

交互题还是很难搞呀~

C. Chocolate Bunny(交互,推导)

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

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

其实就能得到一些东西了

假 设 a i > a j 假设a_i>a_j ai>aj

那 么 y = a j 那么y=a_j y=aj

那 么 x < a j 那么x<a_j x<aj

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

所 以 , 经 过 ( i , j ) 得 到 x , 经 过 ( j , i ) 得 到 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的较小值 xyaiaj

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

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

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

2 n − 2 次 操 作 得 到 n − 1 个 数 , 剩 下 那 个 是 n ( 因 为 n 永 远 不 会 当 作 较 小 值 求 出 来 ) 2n-2次操作得到n-1个数,剩下那个是n(因为n永远不会当作较小值求出来) 2n2n1,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);
}
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服