江苏网站建站系统平台,江苏省城乡建设厅网站首页,机票便宜网站建设,wordpress 字符被转义正题
题目链接:https://www.luogu.com.cn/problem/CF1375F 题目大意
给出a,b,ca,b,ca,b,c。先手每次指定一个数kkk#xff0c;然后后手指定一个数字加上kkk#xff0c;若有相同的数则先手胜利#xff0c;操作次数超过100010001000后后手胜。后手不能两次操作同一个数。
你…正题
题目链接:https://www.luogu.com.cn/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即可
然后假设操作后abcabcabc那么上一次操作的是aaa。
然后此时如果加上一个(a−b)(a−c)(a-b)(a-c)(a−b)(a−c)就能够构成一个等差了。
显然的因为后手不能操作aaa如果操作了bbb或ccc就会让操作的那个变成最大的然后刚好等差。
所以先手三步以内必胜。
时间复杂度O(1)O(1)O(1) code
#includecstdio
#includecstring
#includealgorithm
#define ll long long
using 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(x0)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(y0)return 0;printf(%lld\n,a[x]-a[6-x-y]);fflush(stdout);scanf(%lld,x);return 0;
}