Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
注意特殊trick感谢这道题…无比的感谢 注意白后可以被白王阻挡 上代码 #include<cstdio> #include<iostream> #include<cmath> #include<cstring> #include<algorithm> using namespace std; const int N = 12 ; int n; int a[N][N]; bool vis[N][N]; int poswkx,poswky,posbkx,posbky; int ansx[100],ansy[100]; int top; int posx,posy; void print() { for(int i=0;i<=n+1;i++){ for(int j=0;j<=n+1;j++) cout<<vis[i][j]; cout<<endl;}cout<<endl; } inline int Abs(int x) { if(x>=0) return x; else return -x; } bool next(int x1,int y1,int x2,int y2) { if(abs(x1-x2)<=1 && abs(y1-y2)<=1) return 1; else return 0; } bool check(int x,int y) { if( !( posx==x || posy==y || (posx-posy==x-y) || (x+y==posx+posy) ) ) return 0; if(next(x,y,posbkx,posbky) && !next(x,y,poswkx,poswky) ) return 0; if(x==poswky && y==poswkx) return 0; memset(vis,0,sizeof(vis)); for(int i=0;i<=n+1;i++) vis[0][i]=vis[i][0]=vis[i][9]=vis[9][i]=1; int wx=poswky,wy=poswkx; vis[wx][wy]=vis[wx-1][wy-1]=vis[wx-1][wy]=vis[wx-1][wy+1]=vis[wx][wy-1]=vis[wx][wy+1]=vis[wx+1][wy+1]=vis[wx+1][wy]=vis[wx+1][wy-1]=1; for(int i=1;i<=n;i++) vis[y][i]=vis[i][x]=1; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if(i-j==x-y) vis[j][i]=1; if(i+j==x+y) vis[j][i]=1; } wx=posbky,wy=posbkx; if(vis[wx][wy]==1 && vis[wx-1][wy-1]==1 && vis[wx-1][wy]==1 && vis[wx-1][wy+1]==1 && vis[wx][wy-1]==1 && vis[wx][wy+1]==1 && vis[wx+1][wy+1]==1 && vis[wx+1][wy]==1 && vis[wx+1][wy-1]==1) return 1; else return 0; } int main() { n=8; string s1,s2,s3; cin>>s1>>s2>>s3;// wK wQ Bk char c1=s1[0],c2=s1[1]; a[c2-'0'][c1-'a'+1]=1; poswkx=c1-'a'+1,poswky=c2-'0'; c1=s2[0],c2=s2[1]; posx=c1-'a'+1,posy=c2-'0'; c1=s3[0],c2=s3[1]; a[c2-'0'][c1-'a'+1]=3; posbkx=c1-'a'+1,posbky=c2-'0'; bool flag=0; int x=posx,y=posy; int tmp; while(x>0) { if(a[x][y]) break; if(check(x,y)) { ansx[++top]=x,ansy[top]=y; flag=1; } x--; } x=posx,y=posy; while(x<=n) { if(a[x][y]) break; if(check(x,y)) { ansx[++top]=x,ansy[top]=y; flag=1; } x++; } x=posx,y=posy; while(y>0) { if(a[x][y]) break; if(check(x,y)) { ansx[++top]=x,ansy[top]=y; flag=1; } y--; } x=posx,y=posy; while(y<=n) { if(a[x][y]) break; if(check(x,y)) { ansx[++top]=x,ansy[top]=y; flag=1; } y++; } x=posx,y=posy; while(x<=n && y<=n) { if(a[x][y]) break; if(check(x,y)) { ansx[++top]=x,ansy[top]=y; flag=1; } x++,y++; } x=posx,y=posy; while(x>=1 && y>=1) { if(a[x][y]) break; if(check(x,y)) { ansx[++top]=x,ansy[top]=y; flag=1; } x--,y--; } x=posx,y=posy; while(x<=n&&y>=1) { if(a[x][y]) break; if(check(x,y)) { ansx[++top]=x,ansy[top]=y; flag=1; } x++,y--; } x=posx,y=posy; while(x>0 && y<=n ) { if(a[x][y]) break; if(check(x,y)) { ansx[++top]=x,ansy[top]=y; flag=1; } x--,y++; } int ansxx=9,ansyy=9; for(int i=1;i<=top;i++) if(ansx[i]<ansxx || (ansx[i]==ansxx && ansy[i]<ansyy)) ansxx=ansx[i],ansyy=ansy[i]; if(flag) cout<<char(ansxx-1+'a')<<ansyy<<endl; if(!flag) cout<<"no"<<endl; return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator