博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1082 Calendar Game
阅读量:5971 次
发布时间:2019-06-19

本文共 1978 字,大约阅读时间需要 6 分钟。

POJ_1082

    最近没学英语了,一开始把November当成了12月,囧了。

    这个题目想象成一开始在(yy,mm,dd)这个点有一个棋子,每人然后可以沿合法的位置移动一步,最后当棋子到达(2001,11,4)这个点时就算游戏结束。这样就把这个问题化归到有向无环图上的游戏了,于是用SG函数就可以解决了。

    另外推荐一个讲SG函数入门知识的博客:。

#include
#include
#define Y 1900 int mdays[][15] = {
{
0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {
0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}}; int sg[110][15][35]; void prepare() {
memset(sg, -1, sizeof(sg)); sg[101][11][4] = 0; } int isleap(int yy) {
return yy % 400 == 0 || (yy % 4 == 0 && yy % 100 != 0); } int getnextd(int yy, int mm, int dd, int &nexty, int &nextm, int &nextd) {
int i, j, k, t1, t2; if(yy == 2001 && mm == 11 && dd == 4) return 0; t1 = isleap(yy); if(mm == 12 && dd == 31) nexty = yy + 1, nextm = 1, nextd = 1; else if(dd == mdays[t1][mm]) nexty = yy, nextm = mm + 1, nextd = 1; else nexty = yy, nextm = mm, nextd = dd + 1; return 1; } int getnextm(int yy, int mm, int dd, int &nexty, int &nextm, int &nextd) {
int i, j, k, t1, t2; if(yy == 2001 && mm == 11) return 0; t1 = isleap(yy); if(yy == 2001 && mm == 10 && dd > 4) return 0; if(mm == 12) nexty = yy + 1, nextm = 1, nextd = dd; else {
nexty = yy, nextm = mm + 1, nextd = dd; if(nextd > mdays[t1][nextm]) return 0; } return 1; } int dp(int yy, int mm, int dd) {
if(sg[yy - Y][mm][dd] != -1) return sg[yy - Y][mm][dd]; int i, j, k, nexty, nextm, nextd, h[5]; memset(h, 0, sizeof(h)); if(getnextd(yy, mm, dd, nexty, nextm, nextd)) h[dp(nexty, nextm, nextd)] = 1; if(getnextm(yy, mm, dd, nexty, nextm, nextd)) h[dp(nexty, nextm, nextd)] = 1; for(i = 0; h[i]; i ++); return sg[yy - Y][mm][dd] = i; } void solve() {
int i, j, k, yy, dd, mm; scanf("%d%d%d", &yy, &mm, &dd); if(dp(yy, mm, dd) == 0) printf("NO\n"); else printf("YES\n"); } int main() {
int t; prepare(); scanf("%d", &t); while(t --) {
solve(); } return 0; }

转载地址:http://blwox.baihongyu.com/

你可能感兴趣的文章
深入理解Java:注解(Annotation)--注解处理器
查看>>
WebCenter Space中配置使用WSRP Portlet
查看>>
cpus Vs cpu period and cpu quota
查看>>
ES6新特性5:类(Class)和继承(Extends)
查看>>
Spring 事务不回滚
查看>>
获取url的hash值
查看>>
App重新启动
查看>>
矩阵乘法
查看>>
得到目标元素距离视口的距离以及元素自身的宽度与高度(用于浮层位置的动态改变)...
查看>>
安装和配置Tomcat
查看>>
实验三
查看>>
第一次实验总结
查看>>
openssh for windows
查看>>
java点滴(6)之java引用
查看>>
PostgreSQL cheatSheet
查看>>
uva12716 n以内有多少对整数a、b满足(1≤b≤a)且gcd(a, b) = xor(a, b)
查看>>
char string 区别
查看>>
网页编辑器
查看>>
vue ...mapMutations 的第一个参数默认为 数据对象state
查看>>
mui页面交互
查看>>