标签:基础练习
总是WA 自己试了些数据都没问题 有哪位大神愿意给看下
思路就是模拟 先存下来各个点位置 然后让将依次尝试四个位置 把吃掉的子赋值为0 对于每个位置 先判断马 再按四个方向判断车和帅 如果遇到炮或马就看看后边有没有炮
#include<iostream> #include<cstring> #include<cstdio> using namespace std; const int xx=10,yy=9; int a[11][10];//you can't value it when announcing,only memset(a,0,sizeof(a)) int dx[4]={0,1,0,-1},dy[4]={-1,0,1,0};//将增量 int horseX[8]={-2,-2,2,2,-1,1,-1,1};//马dx int horseY[8]={-1,1,-1,1,-2,-2,2,2};//马dy int footX[8]={-1,-1,1,1,0,0,0,0};//马别腿fx int footY[8]={0,0,0,0,-1,-1,1,1};//马别腿fy bool judge(int nx,int ny){//判断是否生存 a[nx][ny]=0; int i; for (i=0;i<7;i++){ int nowi=nx+horseX[i]; int nowj=ny+horseY[i]; if (a[nowi][nowj]==3){ if (a[nx+footX[i]][ny+footY[i]]) return false; } } for (i=nx+1;i<=xx;i++){ if (a[i][ny]!=0){ if ((a[i][ny]==2)||(a[i][ny]==5)) return false; else for (int j=i+1;j<=xx;j++) if (a[j][ny]==4) return false; } } for (i=ny+1;i<=yy;i++){ if (a[nx][i]!=0){ if ((a[nx][i]==2)||(a[nx][i]==5)) return false; else for (int j=i+1;j<=yy;j++) if (a[nx][j]==4) return false; } } for (i=nx-1;i>=1;i--) if (a[i][ny]==2) return false; for (i=ny-1;i>=1;i--){ if (a[nx][i]!=0){ if (a[nx][i]==2) return false; else for (int j=i-1;j>=1;j--) if (a[nx][j]==4) return false; } } return true; } int main(){ memset(a,0,sizeof(a)); int n,nx,ny; while ((cin>>n>>nx>>ny) && n){ char ch;//R=ju=2;H=ma=3;C=pao=4;G=shuai=5; int x,y; for (int i=1;i<=n;i++){ cin>>ch>>x>>y; if (ch=='R') a[x][y]=2; else if (ch=='G') a[x][y]=5; else if (ch=='H') a[x][y]=3; else if (ch=='C') a[x][y]=4; } int k,h,i,j; bool flag=false; for (i=0;i<4;i++){ if ((nx+dx[i]<1)||(nx+dx[i]>3)||(ny+dy[i]<4)||(ny+dy[i]>6)) continue; flag=judge(nx+dx[i],ny+dy[i]); if (flag) break; } if(flag) cout<<"NO"<<endl; else cout<<"YES"<<endl; } return 0; }
【疑问】2011 Asia Fuzhou Regional A
标签:基础练习
原文地址:http://blog.csdn.net/ametake/article/details/43604207