zoukankan      html  css  js  c++  java
  • #交互#CF1375F Integer Game

    题目

    有三堆石子初始石子数分别为(a,b,c),可以选择先手还是后手操作,
    每次操作形如先手选择一个正整数 (k) ,后手自由选择一堆石子加上 (k)
    但是不能和上一次操作选择的石堆相同。
    如果在1000次操作内,存在两堆石子相同则先手必胜,否则先手必败


    分析

    考虑如果单纯补上两堆石子的差值那么后手必然会选择第三堆石子或者大的那堆石子,
    那么就是要让后手无法选择,所以要让(b-a=c-b)并且强制(c)这一堆不能选先手必胜,
    考虑先设置公差,(c)要倒数第二轮,那么可以先指定(b)是哪一堆,一开始设置(inf)即可,
    那么(b)就是第二大的,因为最后要使(b*2=a+c),那么可以将公差设为(b*2-a-c)
    这样后手选的数一定是最大的,这样再设置公差三轮先手必胜


    代码

    #include <cstdio>
    #define rr register
    using namespace std;
    typedef long long lll; lll a[3];
    inline signed Get_Rank(lll x){
    	printf("%lld
    ",x),fflush(stdout);
        rr int ret; scanf("%d",&ret);
        if (!ret) return -1;
        a[--ret]+=x; return ret;
    }
    signed main(){
    	for (rr int i=0;i<3;++i) scanf("%lld",&a[i]);
    	printf("First
    "),fflush(stdout);
    	rr int now0=Get_Rank(1e10); if (now0==-1) return 0;
    	rr int now1=Get_Rank(a[now0]*3-a[0]-a[1]-a[2]); if (now1==-1) return 0;
    	Get_Rank(a[now1]-a[now0]);
        return 0;
    }
    
  • 相关阅读:
    三、Oracle 查询+where条件
    二、Oracle 数据库基本操作
    一、Oracle 安装
    18.JAVA经典编程题(50题及答案)
    17.网络编程
    16.xml
    Js模块化开发--seajs和gruntJs
    git命令行指南
    nodejs学习笔记---1
    面向对象及组件开发---笔记1
  • 原文地址:https://www.cnblogs.com/Spare-No-Effort/p/15125876.html
Copyright © 2011-2022 走看看