• POJ 1082---->一个神一般的题


    代码只有10行,反正我是看了题解才知道的。
    嗯 首先 看到这个题, BFS+一堆判断(什么平年闰年跨年各种乱搞肯定能搞出来,但是Code length就不一定了)。。。
    然后呢
    就看到了这个题解

    从后往前推,对于某一天的胜败由两天决定:后一天和后一个月的同一天(当然有的没有第二个决定因素)
    若两者都是必胜态,则这一天必败。若有一天为必败,则这一天必胜。
    2001年11月4日到2001年10月4日胜败是交替的,设月+日等于M。发现M为偶数时必胜,为奇数是必败。
    2001年10月4日必胜,10月3日由10月4日和11月3号决定,两者都是必胜,所以10月3号必败。同理可判定10月剩余的日子。相邻的两个月的同一天胜败情况相反,但这一天M的奇偶性也相反(月份或日期两者只有一个减一),所以结论成立。
    下面考虑特殊情况:
    9月只有30天,9月30号由10月1号(必败)和10月30号(必胜)决定,为必胜。与上述结论矛盾,但9月29号为必胜,9月后面的日子依然遵循这样的规律,可见9月30号为一个特殊情况,同样的特殊情况还有11月30号(用同样的方法判断4,6月30号发现遵循结论),对于2月(不管是闰年还是平年)发现也符合。
    所以结论:除9月30号和11月30号外,M为偶数必胜,为奇数必败。

    转自:http://blog.sina.com.cn/s/blog_a45d310e01017rrh.html
    (经测试,POJ测试数据中有9.30或者11.30)

    真心佩服,我肯定想不出来这么绝妙的方法。

    // by Sirius_Ren
    #include <cstdio>
    int main(){
        register int n,a,b,c;
        scanf("%d",&n);
        while(n--){
            scanf("%d%d%d",&a,&b,&c);
            if((b==9&&c==30)||(b==11&&c==30)||!((b+c)&1))printf("YES
    ");
            else printf("NO
    ");
        }
    }

    这里写图片描述

  • 相关阅读:
    Codeforces Round #592 (Div. 2)
    2019 China Collegiate Programming Contest Qinhuangdao Onsite
    2019CCPC 秦皇岛 E.Escape
    2018 Multi-University Training Contest 3
    AtCoder Regular Contest 098
    Educational Codeforces Round 74 (Rated for Div. 2)
    Codeforces Round #590 (Div. 3) F
    AtCoder Regular Contest 99
    [AH2017/HNOI2017] 单旋
    [CF1304F] Animal Observation
  • 原文地址:https://www.cnblogs.com/SiriusRen/p/6532463.html
Copyright © 2020-2023  润新知