ZOJ 1024 Calendar Game

本文探讨了如何解决CalendarGame游戏中的策略问题,通过数学分析和观察推论,揭示了胜利的关键在于翻倒2001年11月4日,并详细解释了背后的逻辑和特殊日子的处理。

数学秒杀型。。

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=24

 

自己想的算法很土鳖,然后一搜下好的答案,被秒杀。。。

 

********************************************************
ZOJ 1024 Calendar Game
Tips:这是一道博弈题,活的胜利的一方必须翻倒2001年11月4日;
下面是观察推论结果,11月4日,11+4=15是奇数。由于无论是加
一天还是加一个月都会改变m+d的奇偶性,除了下面几个特例
2月28日、9月30日和11月30日,显然如果m和d是这三个日子的话
则先行者必胜:
2月28日到3月28日
9月30日到10月1日
11月30日到12月1日
剩下的只有当m+d为偶数时先行者必胜。
这里还要说明的是在中间的过程中会不会遇到这几个特殊情况,答案
是否定的,认真想一下就很快能明白了。
这个MS是01年韩国亚洲赛的题目,看来数学还是王道的啊!

******************************************************** 

 

#include<iostream>
using namespace std;
int t, y, m, d;
int main() {
    scanf("%d", &t);
    while (t--) {
        bool res = false;
        scanf("%d%d%d", &y, &m, &d);
        if (m == 2 && d == 28) res = true;
        else if (m == 9 && d == 30) res = true;
        else if (m == 11 && d == 31) res = true;
        else if ((m + d) % 2 == 0) res = true;
        if (res) printf("YES/n");
        else printf("NO/n");
    }
    return 0;
}
 


原文链接: http://blog.youkuaiyun.com/ccanan/article/details/5000874

转载于:https://my.oschina.net/dtec/blog/44512

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值