• 石头剪刀布


    Description

      小明和小头遇到了矛盾,他们决定用男人的方式解决战斗——石头剪刀布。但是小菜觉得石头剪刀布已经过时了,于是他发明了另一个更男人的游戏。小菜给出一个自然数n,小明和小头轮流操作,每次操作可以把n减去n所拥有的数字中的最大值或者最小值(不包括0),不能操作者输(即当n=0时)。
      小菜怕他们不懂,于是给了一个例子n=1024,则最大值=4,最小值=1。假如小明先操作,那么他可以留给小头1023或者1020。
      小明和小头觉得这个游戏很好玩,于是打算多玩几局。每次由小明先操作,如果两人都是用最佳策略,请问谁会赢?

    Input

      第一行只有一个整数t,表示玩t轮游戏
      接下来t行,每行一个自然数n,表示初始时小菜给出的自然数。

    Output

      共t行,如果小明赢了第i轮游戏则在第i行输出“YES” 否则输出“NO”

    Sample Input

    2
    9
    10

    Sample Output

    YES
    NO

    Data Constraint

    Hint

    【数据规模】
      40%的数据n≤50
      100%的数据t≤100,n≤1000000
    .
    .
    .
    .
    .
    .
    .

    分析

    显然我们发现这个输赢是奇偶分配的,所以可以转移动态 fi=!fj
    那么j是什么呢? 就是i-i中最大值和i-i中最小值,那么设这两为j,k得 fi=!fj∨!fk
    那么我们预处理1~10^6的所有值即可
    .
    .
    .
    .
    .
    .
    .

    程序:
    #include<cstdio>
    #include<iostream>
    using namespace std; 
    int main()
    {
        bool f[1000001];
        int t,n; 
        cin>>t; 
        for (int i=1;i<=1000000;i++) 
        {
            int y=i,maxx=0,minn=2147483647;
            while (y>0)
            {
                if (y%10)
                {
                    maxx=max(maxx,y%10); 
                    minn=min(minn,y%10);
                } 
                y/=10;
            }
            f[i]=!f[i-maxx]||!f[i-minn]; 
        }
       for (int i=1;i<=t;i++)
       {
            cin>>n;
            if (f[n]) cout<<"YES"<<endl; else cout<<"NO"<<endl;
       }
       return 0;
    }
  • 相关阅读:
    Error -26631: HTTP Status-Code=400 (Bad Request) for
    mysql中的制表符替换
    mysql中json数据的拼接方式
    使用Nightwatch.js做基于浏览器的web应用自动测试
    Selenium + Nightwatch 自动化测试环境搭建
    Python web 框架:web.py
    转 Python Selenium设计模式-POM
    自动化测试
    日志打印longging模块(控制台和文件同时输出)
    读取配置文件(configparser,.ini文件)
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9499950.html
Copyright © 2020-2023  润新知