1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > CF1375F-Integer Game【交互】

CF1375F-Integer Game【交互】

时间:2020-09-09 22:29:51

相关推荐

CF1375F-Integer Game【交互】

正题

题目链接:/problem/CF1375F

题目大意

给出a,b,ca,b,ca,b,c。先手每次指定一个数kkk,然后后手指定一个数字加上kkk,若有相同的数则先手胜利,操作次数超过100010001000后后手胜。后手不能两次操作同一个数。

你选择先手/后手后与交互系统进行交互。

1≤a,b,c≤109,1≤k≤10121\leq a,b,c\leq 10^9,1\leq k\leq 10^{12}1≤a,b,c≤109,1≤k≤1012

解题思路

如果三个数等差并且上次后手操作的那个数是最大的就可以获胜。

是不是有一种先手必胜的感觉,那选择先手,再考虑怎么构造等差。

我们先让后手操作一个数后变成当前最大的(选择一个很大的数作为kkk即可)

然后假设操作后a>b>ca>b>ca>b>c,那么上一次操作的是aaa。

然后此时如果加上一个(a−b)+(a−c)(a-b)+(a-c)(a−b)+(a−c)就能够构成一个等差了。

显然的,因为后手不能操作aaa,如果操作了bbb或ccc就会让操作的那个变成最大的,然后刚好等差。

所以先手三步以内必胜。

时间复杂度O(1)O(1)O(1)

code

#include<cstdio>#include<cstring>#include<algorithm>#define ll long longusing namespace std;ll x,y,a[4];signed main(){scanf("%lld%lld%lld",&a[1],&a[2],&a[3]);printf("First\n");fflush(stdout);printf("100000000000\n");fflush(stdout);scanf("%lld",&x);a[x]+=1e11;if(x==0)return 0;printf("%lld\n",a[x]*3-a[1]-a[2]-a[3]);fflush(stdout);scanf("%lld",&y);a[y]+=a[x]*3-a[1]-a[2]-a[3];if(y==0)return 0;printf("%lld\n",a[x]-a[6-x-y]);fflush(stdout);scanf("%lld",&x);return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。