zoukankan      html  css  js  c++  java
  • hdu4121 Xiangqi(模拟)

    模拟题一般要考虑情况的!

    将走一步可能走出范围或者吃掉红方的一个棋子;将帅直线且中间无子的时候,帅可以直接冲将;卡马脚的时候,马不能往跳那个方向跳。

    //#pragma comment(linker, "/STACK:102400000")
    #include<cstdlib>
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    #include<set>
    #include<map>
    #include<list>
    #include<queue>
    #include<stack>
    #include<vector>
    #define tree int o,int l,int r
    #define lson o<<1,l,mid
    #define rson o<<1|1,mid+1,r
    #define lo o<<1
    #define ro o<<1|1
    #define pb push_back
    #define mp make_pair
    #define ULL unsigned long long
    #define LL long long
    #define inf 0x7fffffff
    #define eps 1e-7
    #define N 20
    using namespace std;
    int m,n,T,t,x,y;
    int ma[20][20],a[N][N];
    char str[N];
    struct Node
    {
        char c;
        int x,y;
    } node[N];
    int dx[4]= {-1,0,1,0};
    int dy[4]= {0,1,0,-1};
    int xwu(int x1,int x2,int y1)
    {
        for(int i=min(x1,x2)+1; i<max(x1,x2); i++)
            if(ma[i][y1]!=0)return 0;
        return 1;
    }
    int ywu(int y1,int y2,int x)
    {
        for(int i=min(y1,y2)+1; i<max(y1,y2); i++)
            if(ma[x][i]!=0)return 0;
        return 1;
    }
    int xnum(int x1,int x2,int y1)
    {
        int ans=0;
        for(int i=min(x1,x2)+1; i<max(x1,x2); i++)
            if(ma[i][y1]!=0)ans++;
        return ans;
    }
    int ynum(int y1,int y2,int x)
    {
        int ans=0;
        for(int i=min(y1,y2)+1; i<max(y1,y2); i++)
            if(ma[x][i]!=0)ans++;
        return ans;
    }
    int eat(int x1,int y1,Node &p)
    {
        int x2=p.x,y2=p.y;
        if(p.c=='G')
        {
            if(y2==y1&&xwu(x1,x2,y1))
            {
                return 1;
            }
            return 0;
        }
        if(p.c=='R')
        {
            if(y2==y1&&xwu(x1,x2,y1))
            {
                return 1;
            }
            if(x1==x2&&ywu(y1,y2,x1))
            return 1;
            return 0;
        }
        if(p.c=='C')
        {
            if(y2==y1&&xnum(x1,x2,y1)==1)
            {
                return 1;
            }
            if(x1==x2&&ynum(y1,y2,x1)==1)
            return 1;
            return 0;
        }
        if(p.c=='H')
        {
            int all=abs(x1-x2)+abs(y1-y2);
            int cx=abs(x1-x2);
            if(all==3&&(cx==1||cx==2))
            {
                int xx=x2,yy=y2;
                if(cx==2)
                {
                    xx+=(x1-x2)/2;
                }
                else
                {
                    yy+=(y1-y2)/2;
                }
                if(ma[xx][yy]==0)return 1;
            }
            return 0;
        }
    
    }
    int ok(int x,int y)
    {
        for(int i=0; i<n; i++)
            if(node[i].x!=x||node[i].y!=y)
            {
                if(eat(x,y,node[i]))return 0;
            }
        return 1;
    }
    int main()
    {
    #ifndef ONLINE_JUDGE
        freopen("ex.in","r",stdin);
    #endif
        while(scanf("%d%d%d%*c",&n,&x,&y)==3)
        {
            if(!n&&!x&&!y)return 0;
            memset(a,0,sizeof(a));
    
            for (int i=0; i<n; ++i )
            {
                scanf("%s%d%d",str,&node[i].x,&node[i].y);
                node[i].c=str[0];
                a[node[i].x][node[i].y]=1;
            }
            int ans=0;
            for(int i=0; i<4; i++)
            {
                int xx=x+dx[i];
                int yy=y+dy[i];
                memcpy(ma,a,sizeof(a));
                ma[xx][yy]=0;
                if(xx>=1&&xx<=3&&yy>=4&&yy<=6)
                {
                    if(ok(xx,yy))
                    {
                        ans=1;
                        break;//chibudiao
                    }
                }
            }
            puts(ans==1?"NO":"YES");
        }
        return 0;
    }

  • 相关阅读:
    C/C++中变量的作用域和存储类型简介
    Java与JavaScript的区别你明白吗?
    js-2018-11-09 关于Array中的srot()方法和compare()方法
    js-2018-11-01 关于break和continue语句
    0427表格学习
    0426基础标签学习
    css3部分整理
    img图片占不满整个div
    基于google protobuf 的 socket udp 通信
    微信小程序echarts学习记录
  • 原文地址:https://www.cnblogs.com/sbaof/p/3379555.html
Copyright © 2011-2022 走看看