UVA1589xiangqi(模拟)

来源:互联网 发布:恺英网络市值 编辑:程序博客网 时间:2024/05/18 02:37

题目:给你一盘红方已经对黑方“将军”的局,黑方只剩下将,红方还有很多棋子。下一步该黑方走,问红方是否将黑方将死。
debug了一天wa了9发= =非常吐血,其实很多人1A了 我却wa了9发
总的来说模拟的思路:
现将棋盘读入,然后将每一个红方棋子能够吃到的位置都标记起来,最后判断黑方将能去的位置是否会被吃掉。
有一部分wa时没注意要把棋盘读完才能开始标记,因为红色棋子之间会相互影响。
没有其他的理由。。。就是想发上来祭奠一下手残和脑残少女。。。。可能没睡够。。。。

//  Created by ZYD in 2015.//  Copyright (c) 2015 ZYD. All rights reserved.//#include <cstdio>#include <cstdlib>#include <iostream>#include <algorithm>#include <cstring>#include <climits>#include <string>#include <vector>#include <cmath>#include <stack>#include <queue>#include <set>#include <map>using namespace std;#define Size 100000#define ll long long#define mk make_pair#define pb push_back#define mem(array) memset(array,0,sizeof(array))typedef pair<int,int> P;char mp[50][50];int can[50][50];int n,m,x,y,bx,by,ans,fx,fy;char ch;int xx[4]={-1,0,1,0};int yy[4]={0,-1,0,1};//int gx[8]={-1,-1,-1,0,1,1,1,0};//int gy[8]={1,0,-1,-1,-1,0,1,1};int hx[4][2]={-2,-2,-1,1,2,2,-1,1};int hy[4][2]={-1,1,-2,-2,-1,1,2,2};void pHorse(int x,int y){    for(int i=0;i<4;i++){        int nx=x+xx[i];        int ny=y+yy[i];        if(mp[nx][ny]==' '){            for(int j=0;j<2;j++){                int nnx=x+hx[i][j];                int nny=y+hy[i][j];                if(nnx>=1&& nnx<=10&& nny>=1 && nny<=9)                can[nnx][nny]=1;            }        }    }}void pCannon(int i,int j){    int k;    //cout<<i<<' '<<j<<endl;    for(k=i-1;k>=1;k--){        if(mp[k][j]!=' ') break;    }    k--;//cout<<k<<endl;    for(;k>=1;k--){        can[k][j]=1;        if(mp[k][j]!=' ') break;    }    for(k=i+1;k<=10;k++){        if(mp[k][j]!=' ') break;    }    k++;    for(;k<=10;k++){        can[k][j]=1;        if(mp[k][j]!=' ') break;    }    for(k=j-1;k>=1;k--) if(mp[i][k]!=' ')break;    k--;    for(;k>=1;k--){        can[i][k]=1;        if(mp[i][k]!=' ') break;    }    for(k=j+1;k<=9;k++) if(mp[i][k]!=' ') break;    k++;    for(;k<=9;k++){        can[i][k]=1;        if(mp[i][k]!=' ') break;    }}void pR(int i,int j){    //cout<<'R'<<endl;    for(int k=i-1;k>=1;k--){        can[k][j]=1;        if(mp[k][j]!=' ')break;    }    for(int k=i+1;k<=10;k++){        can[k][j]=1;        if(mp[k][j]!=' ') break;    }    for(int k=j-1;k>=1;k--){        can[i][k]=1;        if(mp[i][k]!=' ') break;    }    for(int k=j+1;k<=9;k++){        can[i][k]=1;        if(mp[i][k]!=' ') break;    }}bool no(int fx,int fy,int x,int y){    if(fy!=y) return true;    for(int i=x+1;i<fx;i++){        if(mp[i][y]!=' ') return true;    }    return false;}int main(){    freopen("in.txt","r",stdin);    while(~scanf("%d%d%d\n",&n,&bx,&by)&& n&& bx && by){        mem(can);        for(int i=1;i<=10;i++)            for(int j=1;j<=9;j++) mp[i][j]=' ';        for(int i=1;i<=n;i++){            scanf("%c %d %d\n",&ch,&x,&y);            mp[x][y]=ch;        }        for(int i=1;i<=10;i++)            for(int j=1;j<=9;j++){                if(mp[i][j]=='C'){                    pCannon(i,j);                }                if(mp[i][j]=='H'){                    pHorse(i,j);                }                if(mp[i][j]=='G') {                    fx=i;                    fy=j;                }                if(mp[i][j]=='R'){                    //cout<<'R'<<endl;                    //cout<<i<<' '<<j<<endl;                    pR(i,j);                }        }        int flag=0;        for(int i=0;i<4;i++){            int nx=bx+xx[i];            int ny=by+yy[i];            if(can[nx][ny]==0&& nx>=1&& nx<=3&&ny>=4&&ny<=6&& no(fx,fy,nx,ny)){                //cout<<nx<<' '<<ny<<endl;                  flag=1;                break;            }        }        if(flag==1) cout<<"NO"<<endl;        else cout<<"YES"<<endl;    /*  for(int i=1;i<=10;i++){            for(int j=1;j<=9;j++)                cout<<can[i][j]<<" ";            cout<<endl;        }        cout<<"*****"<<endl;*/    }    return 0;}
0 0
原创粉丝点击