紫书章四习题一 xiangqi uva 1589(模拟)
2017-04-03 19:55
405 查看
题意:黑棋只有一个将,红棋还有帅,马,车,炮,中的几个,然后问,现在的局面是不是将死。什么是将死呢?就是下一步黑棋的将无论走到哪里,都是死路一条。(那如果是帅无论走到哪都是死路的话,那是不是….帅死?)
然后想法是将红棋的攻击范围都标记出来,如果之后将可以走的地方都在红棋的攻击范围中的话,就代表将死,否则代表没有将死。
(自己有时候还是太粗心。。。想干脆换个人设算了(摊手)。。)
然后想法是将红棋的攻击范围都标记出来,如果之后将可以走的地方都在红棋的攻击范围中的话,就代表将死,否则代表没有将死。
(自己有时候还是太粗心。。。想干脆换个人设算了(摊手)。。)
#include <iostream> #include <cstring> #include <algorithm> #include <cstdio> #include <cmath> using namespace std; int bl[15][15],re[15][15]; int M[15][15]; int main() { int n,x,y; while(scanf("%d %d %d",&n,&y,&x)!=EOF&&n+x+y){ memset(bl,0,sizeof(bl)); memset(re,0,sizeof(re)); memset(M,0,sizeof(M)); for(int i=1;i<=3;i++){ for(int j=4;j<=6;j++){ if(i==y&&abs(x-j)==1) bl[i][j]=1; if(j==x&&abs(y-i)==1) bl[i][j]=1; } } for(int i=0;i<n;i++) { char c; int a,b; cin>>c>>a>>b; re[a][b]=c; } int gg=0; for(int i=1;i<=10;i++) { for(int j=1;j<=9;j++) { if(re[i][j]=='G'||re[i][j]=='R'){ if(re[i][j]=='G') { int g=0; if(j==y){ for(int h=i-1;h>y;h--) { if(re[h][j]) {g=1;break;} } if(!g) gg=1; for(int h=i+1 4000 ;h<y;h++) { if(re[h][j]) {g=1;break;} } if(!g) gg=1; } } if(gg) break; int k; for(k=i-1;k>=1;k--)//above { M[k][j]=1; if(re[k][j]) break; } for(k=i+1;k<=10;k++)//xia { M[k][j]=1; if(re[k][j]) break; } for(k=j-1;k>=1;k--)//left { M[i][k]=1; if(re[i][k]) break; } for(k=j+1;k<=9;k++)//right { M[i][k]=1; if(re[i][k]) break; } } if(re[i][j]=='H') { if(i-2>=1&&!re[i-1][j]){ if(j-1>=1) M[i-2][j-1]=1; if(j+1<=9) M[i-2][j+1]=1; } if(i+2<=10&&!re[i+1][j]){ if(j-1>=1) M[i+2][j-1]=1; if(j+1<=9) M[i+2][j+1]=1; } if(j-2>=1&&!re[i][j-1]) { if(i-1>=1) M[i-1][j-2]=1; if(i+1<=10) M[i+1][j-2]=1; } if(j+2<=9&&!re[i][j+1]) { if(i-1>=1) M[i-1][j+2]=1; if(i+1<=10) M[i+1][j+2]=1; } } if(re[i][j]=='C') { int k,flag=0; for(k=i-1;k>=1;k--)//above { if(re[k][j]) {flag=1;break;} } if(flag){ for(k=k-1;k>=1;k--) { M[k][j]=1; if(re[k][j]) break; } } flag=0; for(k=i+1;k<=10;k++)//xia { if(re[k][j]){flag=1;break;} } if(flag) { for(k=k+1;k<=10;k++){ M[k][j]=1; if(re[k][j]) break; } } flag=0; for(k=j-1;k>=1;k--)//left { if(re[i][k]){flag=1;break;} } if(flag){ for(k=k-1;k>=1;k--) { M[i][k]=1; if(re[i][k]) break; } } flag=0; for(k=j+1;k<=9;k++)//right { if(re[i][k]) {flag=1;break;} } if(flag) { for(k=k+1;k<=9;k++) { M[i][k]=1; if(re[i][k]) break; } } } } if(gg) break; } if(gg) printf("NO\n"); else { int ans=0; for(int i=1;i<=3;i++){ for(int j=4;j<=6;j++){ if(bl[i][j]==1&&M[i][j]==0) { ans=1; break; } } } if(ans) printf("NO\n"); else printf("YES\n"); } } return 0; }
相关文章推荐
- 紫书章四习题一 xiangqi uva 1589(模拟)
- 紫书章四习题一 xiangqi uva 1589(模拟)
- 紫书章四习题一 xiangqi uva 1589(模拟)
- 紫书章四习题一 xiangqi uva 1589(模拟)
- 紫书章四习题一 xiangqi uva 1589(模拟)
- 紫书章四习题一 xiangqi uva 1589(模拟)
- 紫书章四习题一 xiangqi uva 1589(模拟)
- ●UVa 1589 Xiangqi(模拟)
- UVa 1589 Xiangqi(模拟 HDU4121)
- hdu4121 Xiangqi && uva1589 Xiangqi (模拟)
- (模拟) uva 1589 Xiangqi
- UVA 1589:Xiangqi (模拟 Grade D)
- UVA 1589 Xiangqi(仔细的模拟)
- UVA - 1589 Xiangqi (模拟)
- UVA 1589 Xiangqi 直接模拟 提交了近50次要跪。。
- UVA 1589 Xiangqi——模拟
- Uva 1589 - Xiangqi (模拟)
- 算法竞赛入门经典第四章习题4-1 Xiangqi UVA - 1589
- UVA - 1589 Xiangqi (模拟)
- [刷题]算法竞赛入门经典(第2版) 4-1/UVa1589 - Xiangqi