zoukankan      html  css  js  c++  java
  • CF1375FInteger Game【交互】

    正题

    题目链接:https://www.luogu.com.cn/problem/CF1375F


    题目大意

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

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

    \(1\leq a,b,c\leq 10^9,1\leq k\leq 10^{12}\)


    解题思路

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

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

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

    然后假设操作后\(a>b>c\),那么上一次操作的是\(a\)

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

    显然的,因为后手不能操作\(a\),如果操作了\(b\)\(c\)就会让操作的那个变成最大的,然后刚好等差。

    所以先手三步以内必胜。

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


    code

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #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(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;
    }
    
  • 相关阅读:
    前端知识体系
    DOMContentLoaded与load的区别
    最佳网页宽度及其实现
    一些颜色工具网站
    Firebug入门指南
    CSS中背景图片定位方法
    字符编码笔记:ASCII,Unicode 和 UTF-8
    学JS的书籍
    深入理解定位父级offsetParent及偏移大小
    event——事件对象详解
  • 原文地址:https://www.cnblogs.com/QuantAsk/p/14413247.html
Copyright © 2011-2022 走看看