`
暴风雪
  • 浏览: 377485 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

[模拟]hdoj 4241:Xiangqi

阅读更多

大致题意:
    福州现场赛的水模拟,给你一个棋局判定黑棋是不是死棋。

 

大致思路:

    真是坑爹的题目啊,无力吐槽中。

贴上一组神数据

5 1 4

R 2 4

H 3 2

C 3 3

C 3 4

G 10 5


 

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int nMax=11;
int dang[nMax][nMax],n;
bool vis[nMax][nMax];
class fuck{
public:
    char c[10];
    int x,y;
}node[nMax];

void genkill(int a){    //老将
    int x=node[a].x,i,j;
    int y=node[a].y;
    for(i=y-1;i>=1;i--){
        dang[i][x]=1;
        if(vis[i][x]!=0)break;   //直到他面前的那个棋子路线上的点都危险
    }
}

void cankill(int a){   //炮
    int x=node[a].x,i,j;
    int y=node[a].y;
    for(i=x+1;x<=9;i++){
        if(vis[y][i]){
            for(j=i+1;j<=9;j++){
                dang[y][j]=1;
                if(vis[y][j])break;
            }
            break;
        }
    }

//cout<<"dawd\n";
    for(i=x-1;i>=1;i--){
        if(vis[y][i]){
            for(j=i-1;j>=1;j--){
                dang[y][j]=1;
                if(vis[y][j])break;
            }
            break;
        }
    }
    for(i=y+1;i<=10;i++){
        if(vis[i][x]){
            for(j=i+1;j<=10;j++){
                dang[j][x]=1;
                if(vis[j][x])break;
            }
            break;
        }
    }

    for(i=y-1;i>=1;i--){
        if(vis[i][x]){
            for(j=i-1;j>=1;j--){
                dang[j][x]=1;
                if(vis[j][x])break;
            }
            break;
        }
    }


}

void horkill(int a){   // 马
    int x=node[a].x,i,j,xx,yy;
    int y=node[a].y;
    if(!vis[y-1][x]){
        yy=y-2;
        xx=x-1;
        if(xx>=1&&xx<=9&&yy>=1&&yy<=10){
            dang[yy][xx]=1;
        }
        xx=x+1;
        if(xx>=1&&xx<=9&&yy>=1&&yy<=10){
            dang[yy][xx]=1;
        }
    }

    if(!vis[y+1][x]){
        yy=y+2;
        xx=x-1;
        if(xx>=1&&xx<=9&&yy>=1&&yy<=10){
            dang[yy][xx]=1;
        }
        xx=x+1;
        if(xx>=1&&xx<=9&&yy>=1&&yy<=10){
            dang[yy][xx]=1;
        }
    }

    if(!vis[y][x+1]){
        xx=x+2;
        yy=y-1;
        if(xx>=1&&xx<=9&&yy>=1&&yy<=10){
            dang[yy][xx]=1;
        }
        yy=y+1;
        if(xx>=1&&xx<=9&&yy>=1&&yy<=10){
            dang[yy][xx]=1;
        }
    }

    if(!vis[y][x-1]){
        xx=x-2;
        yy=y-1;
        if(xx>=1&&xx<=9&&yy>=1&&yy<=10){
            dang[yy][xx]=1;
        }
        yy=y+1;
        if(xx>=1&&xx<=9&&yy>=1&&yy<=10){
            dang[yy][xx]=1;
        }
    }
}

void ridkill(int a){   //狙
    int x=node[a].x,i,j;
    int y=node[a].y;
    for(i=x+1;i<=9;i++){
        dang[y][i]=1;
        if(vis[y][i])break;
    }
    for(i=x-1;i>=1;i--){
        dang[y][i]=1;
        if(vis[y][i])break;
    }
    for(i=y-1;i>=1;i--){
        dang[i][x]=1;
        if(vis[i][x]!=0)break;
    }
    for(i=y+1;i<=10;i++){
        dang[i][x]=1;
        if(vis[i][x]!=0)break;
    }
}

int main(){
    int i,j,x,y,flag,xx,yy;
    while(cin>>n){
        flag=0;
        cin>>node[0].y>>node[0].x;
        if(n==0&&node[0].y==0&&node[0].x==0)break;
        memset(dang,0,sizeof(dang));
        memset(vis,0,sizeof(vis));
        for(i=1;i<=n;i++){
            cin>>node[i].c>>node[i].y>>node[i].x;
            vis[node[i].y][node[i].x]=1;
        }
        for(i=1;i<=n;i++){
            if(node[i].c[0]=='G'){genkill(i);}
            if(node[i].c[0]=='C'){cankill(i);}
            if(node[i].c[0]=='H'){horkill(i);}
            if(node[i].c[0]=='R'){ridkill(i);}
        }
//        for(i=1;i<=10;i++){
//            for(j=1;j<=9;j++){
//                cout<<dang[i][j];
//            }cout<<endl;
//        }
        x=node[0].x,y=node[0].y;
        xx=x+1;yy=y;
        if(xx>=4&&xx<=6&&yy>=1&&yy<=3&&!dang[yy][xx]){//cout<<1;
        flag=1;}
        xx=x-1;yy=y;
        if(xx>=4&&xx<=6&&yy>=1&&yy<=3&&!dang[yy][xx]){//cout<<2;
        flag=1;}
        xx=x;yy=y+1;
        if(xx>=4&&xx<=6&&yy>=1&&yy<=3&&!dang[yy][xx]){//cout<<3;
        flag=1;}
        xx=x;yy=y-1;
        if(xx>=4&&xx<=6&&yy>=1&&yy<=3&&!dang[yy][xx]){//cout<<4;
        flag=1;}
        if(flag)cout<<"NO\n";//printf("NO\n");
        else cout<<"YES\n";//printf("YES\n");
    }
    return 0;
}

1
1
分享到:
评论
2 楼 暴风雪 2012-03-08  
反Orz
1 楼 笔良文昌 2012-03-08  
组团 Orz Orz Orz Orz Orz Orz Orz Orz Orz Orz Orz Orz Orz

相关推荐

Global site tag (gtag.js) - Google Analytics