• HDOJ1079&POJ1082&ZOJ1024 Calendar Game [找规律博弈]


    HDOJ1079&POJ1082&ZOJ1024 Calendar Game [找规律博弈]
    根据奇偶性的变化找到规律,特殊情况特殊考虑

    题目大意是:

    两个家伙在区域赛前夕闲的无聊,然后玩一种无限纠结的游戏,随即给定一个日期,每次只能移动day OR month..........

    而且如果下一个月没有当前day的话, 你就不能移动month,比如1月31日,你只能移动day 使其到2月1日,而不能移动月让其到达2月31日,原因你懂的!

    嗯,现在Adam开始YY了要!需要你来找一个必胜策略!(到达2001.11.4日就不能移动,无法移动的孩纸败)。

    分析:

    找规律,不然是月份加一,还是日期加一,都改变了奇偶性,只有两个特殊日期9月30日,和11月30日例外。

    那么目标日期是11月4日,为奇数。初始日期如果为偶数的话,先者必胜。

    注意:  a -> b, 如果b全部是必胜态, 则a是必败态, 如果存在一个b是必败态,则a是必胜态。

    必败                  必胜

    11.4                   11.3

    11.2                   11.1

    10.31                 10.30

    …………

    10.5                   10.4

    …………

    10.1                   9.30*******(聪明的人 会选择转移到 10月1日)

                             9.29(聪明的人可以跳到10.29)

    …………

    9.2                  9.1

    8.31                8.30

    ………………

    12.1              11.30*****(聪明的人 会选择转移到12月1日)

    …………

    …………

    …………

    可以大致看到其实胜负和年份是没有关系的说,年份影响的只是2月是否存在第29天……而29是必败点,28为必胜……

    看上图……貌似必胜点 月份+日期 == 偶数 (除去两个例外)

    特殊考虑那两个家伙……

    代码如下:

    int main(){
        int yy,mm,dd;
        int t;
        scanf("%d",&t);
        while(t--){
            scanf("%d%d%d",&yy,&mm,&dd);
            if( ((mm + dd) & 1) ==0 )
                puts("YES");
            else if(dd==30 && ( mm == 9 || mm == 11))
                puts("YES");
            else puts("NO");
        }
        return 0;
    }
  • 相关阅读:
    linux如何编译安装新内核支持NTFS文件系统?(以redhat7.2x64为例)
    RAID磁盘阵列的搭建(以raid0、raid1、raid5、raid10为例)
    linux专题一之文件归档和压缩(tar、file、zip)
    linux专题一之文件管理(目录结构、创建、查看、删除、移动)
    CENTOS6.6上搭建单实例ORACLE12C
    oracle12c各个版本对其需要的依赖包及系统参数的修改
    mysql cp复制和mysqldump备份测试
    mysql之mysql_config_editor
    CENTOS6.6下redis3.2集群搭建
    CENTOS6.6 下mysql MHA架构搭建
  • 原文地址:https://www.cnblogs.com/zn505119020/p/3680506.html
Copyright © 2020-2023  润新知