数学秒杀型。。
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; }
本文针对ZOJ1024 Calendar Game问题,给出了一种快速判断获胜方的算法实现。通过分析日期的特性,特别是11月4日这一关键节点,结合特殊情况的讨论,得出了先行者必胜的条件。
4万+

被折叠的 条评论
为什么被折叠?



