hdu 36832010 Asia Hangzhou Regional Contest Gomoku 模拟、枚举
2011-10-28 11:56
429 查看
View Code
#include<stdio.h> #include<string.h> int map[20][20]; int dx[]={1,1,0,-1,-1,-1,0,1}; int dy[]={0,1,1, 1, 0,-1,-1,-1}; int len=15; int n; bool inside(int x,int y) { return (x>=1&&x<=len&&y>=1&&y<=len); } bool check(int man,int x,int y) { int dir,ex,ey,count=0,i; for(dir=0;dir<4;dir++) { count=0; for(i=1;;i++) { ex=x+i*dx[dir]; ey=y+i*dy[dir]; if(inside(ex,ey)&&map[ex][ey]==man) count++; else break; } for(i=1;;i++) { ex=x+i*dx[dir+4]; ey=y+i*dy[dir+4]; if(inside(ex,ey)&&map[ex][ey]==man) count++; else break; } if(count>=4) return true; } return false; } bool canwin(int man,int &x,int &y) { int i,j; for(i=1;i<=len;i++) for(j=1;j<=len;j++) { if(map[i][j]) continue; if(check(man,i,j)) { x=i; y=j; return true; } } return false; } bool candefend(int man,int &x,int &y) { int i,j,count=0; for(i=1;i<=len;i++) for(j=1;j<=len;j++) { if(map[i][j]) continue; if(check(3-man,i,j)) { count++; if(count>1) return false; x=i; y=j; } } return true; } int main() { int i,j,x,y,c; char color[5][10]={"","white","black"}; while(scanf("%d",&n)!=EOF) { if(n==0) break; int black=0,white=0,man; memset(map,0,sizeof(map)); for(i=1;i<=n;i++) { scanf("%d%d%d",&x,&y,&c); map[x+1][y+1]=c+1; } for(i=1;i<=len;i++) { for(j=1;j<=len;j++) { if(map[i][j]==1) white++; if(map[i][j]==2) black++; } } if(black==white) man=2; else if(black==white+1) man=1; else { printf("Invalid.\n"); continue; } if(canwin(man,x,y)) { printf("Place %s at (%d,%d) to win in 1 move.\n",color[man],x-1,y-1); continue; } else { if(!candefend(man,i,j)) { printf("Lose in 2 moves.\n"); continue; } else { int flag=0; for(i=1;i<=len;i++) { for(j=1;j<=len;j++) { if(map[i][j]) continue; map[i][j]=man; if(!canwin(3-man,x,y)&&!candefend(3-man,x,y)) { printf("Place %s at (%d,%d) to win in 3 moves.\n",color[man],i-1,j-1); flag=1; break; } map[i][j]=0; } if(flag) break; } if(flag) continue; printf("Cannot win in 3 moves.\n"); } } } return 0; }
相关文章推荐
- HDU 2017 多校联合训练赛3 3003 6058 Kanade's sum 枚举 模拟链表
- HDU 5965 枚举模拟 + dp(?)
- HDU 3717 Rescue 枚举 模拟
- HDU 4930 Fighting the Landlords(暴力枚举+模拟)
- HDU 4930 Fighting the Landlords(暴力枚举+模拟)
- HDU 4431 Mahjong(枚举,模拟)
- HDU 4500 小Q系列故事——屌丝的逆袭(模拟枚举排序)
- HDU-3717:Rescue(二分枚举+模拟)
- hdu 1172(模拟、枚举)
- hdu 3699 fzu 2009 A hard Aoshu Problem 枚举 模拟
- hdu 4431 Mahjong (模拟,枚举+dfs)
- hdu 1172(模拟、枚举)
- HDU 6077 Time To Get Up 模拟
- HDU 1172 猜数字(枚举)
- !HDU 4282 A very hard mathematic problem-卡时间-(二分枚举)
- HDU 1006 Tick and Tick 模拟
- hdu 1595 find the longest of the shortest(spfa)(存储并枚举最短路径的边)
- POJ 1696 Space Ant --枚举,模拟,贪心,几何
- HDU 5504 GT and sequence 模拟
- hdu 1013 Digital Roots(数论 模拟)