• vijos 1004 伊甸园日历游戏 博弈+打表找规律


    描述

    Adam和Eve玩一个游戏,他们先从1900.1.1到2001.11.4这个日期之间随意抽取一个日期出来。然后他们轮流对这个日期进行操作:

    1 : 把日期的天数加1,例如1900.1.1变到1900.1.2

    2 : 把月份加1,例如:1900.1.1变到1900.2.1

    其中如果天数超过应有天数则日期变更到下个月的第1天。月份超过12则变到下一年的1月。而且进行操作二的时候,如果有这样的日期:1900.1.31,则变成了1900.2.31,这样的操作是非法的,我们不允许这样做。而且所有的操作均要考虑历法和闰年的规定。

    谁先将日期变到2001.11.4谁就赢了。

    每次游戏都是Adam先操作,问他有没有必胜策略?

    格式

    输入格式

    一个测试点。多组数据。

    第一行为数据组数。

    接下来一行X Y Z表示X年Y月Z日

    输出格式

    输出“YES”or“NO”表示亚当是否有必胜策略。

    样例1

    样例输入1[复制]

     
    3
    2001 11 3
    2001 11 2
    2001 10 3

    样例输出1[复制]

     
    YES
    NO
    NO

    提示

    建议先把所有情况都算出来^_^

    题意:每次可以使月份或日期增加1,从1900.1.1开始,到达2001.11.4则胜利。问谁能必胜。

    思路:题目提示都说了打表,找规律可知月份+日期是偶数则为先手必胜态,除此之外还要特判1.30 9.30 11.30的特殊情况,因为能从N态转到P态.

    /** @Date    : 2016-12-13-21.46
      * @Author  : Lweleth (SoungEarlf@gmail.com)
      * @Link    : https://github.com/
      * @Version :
      */
    #include <stdio.h>
    #include <iostream>
    #include <string.h>
    #include <algorithm>
    #include <utility>
    #include <vector>
    #include <map>
    #include <set>
    #include <string>
    #include <stack>
    #include <queue>
    //#include<bits/stdc++.h>
    #define LL long long
    #define PII pair<int ,int>
    #define MP(x, y) make_pair((x),(y))
    #define fi first
    #define se second
    #define PB(x) push_back((x))
    #define MMG(x) memset((x), -1,sizeof(x))
    #define MMF(x) memset((x),0,sizeof(x))
    #define MMI(x) memset((x), INF, sizeof(x))
    using namespace std;
    
    const int INF = 0x3f3f3f3f;
    const int N = 1e5+20;
    const double eps = 1e-8;
    
    int main()
    {
        int x, y, z;
        int n;
        cin >> n;
        while(n--)
        {
    
            cin >> x >> y >> z;
    
                if(y == 1 && z == 30)//
                    printf("YES
    ");
                else if(y == 9 && z == 30)//
                    printf("YES
    ");
                else if(y == 11 && z == 30)//
                    printf("YES
    ");
                else if( (y + z) % 2 == 0)
                    printf("YES
    ");
                else printf("NO
    ");
    
        }
        return 0;
    }
    
    
  • 相关阅读:
    DataBindings 与 INotifyPropertyChanged 实现自动刷新 WinForm 界面
    EasyInvoice 使用教程
    下载网页通用类
    c#操作excel的一些记录
    sql数据库基础知识整理,常用函数及常用语法
    动态行转列 pivot实现
    EFCodeFirst 数据迁移问题~
    asp.net 翻页时用ViewState保存上一页checkbox勾选的值
    参数化拼接in查询条件,个人备份
    retry
  • 原文地址:https://www.cnblogs.com/Yumesenya/p/6219465.html
Copyright © 2020-2023  润新知