• hdu 4121


    http://acm.hdu.edu.cn/showproblem.php?pid=4121

    中国象棋的简单模拟,给出黑方仅存的老帅坐标,再给出红方棋子坐标,问是否把黑方将死。

    输入数据有多余空格,所以要用cin,不能用scanf,这块错惨了

    #include <iostream>
    using namespace std ;
    int abs(int x)
    {
        return x>0?x:-x ;
    }
    char map[11][11] ;
    int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}} ;
    int RGX,RGY ;
    int xx,yy ;
    int ok(int x,int y)
    {
        if(y!=RGY)
            return 1 ;
        for(int i=x+1 ;i<RGX ;i++)
            if(map[i][y]!='0')
                return 1 ;
        return 0 ;
    }
    int cha(int x,int y)
    {
        if(x!=xx && y!=yy)
            return 0 ;
        if(x==xx)
        {
            int minn=min(y,yy) ;
            int maxn=max(y,yy) ;
            for(int i=minn+1 ;i<maxn ;i++)
                if(map[x][i]!='0')
                    return 0 ;
        }
        if(y==yy)
        {
            int minn=min(x,xx) ;
            int maxn=max(x,xx) ;
            for(int i=minn+1 ;i<maxn ;i++)
                if(map[i][y]!='0')
                    return 0 ;
        }
        return 1 ;
    }
    int hor(int x,int y)
    {
        if((abs(x-xx)==1 && abs(y-yy)==2) || (abs(x-xx)==2 &&abs(y-yy)==1))
        {
            if(xx-x==-2)
            {
                if(map[x-1][y]!='0')
                    return 0 ;
            }
            if(xx-x==2)
            {
                if(map[x+1][y]!='0')
                    return 0 ;
            }
            if(yy-y==-2)
            {
                if(map[x][y-1]!='0')
                    return 0 ;
            }
            if(yy-y==2)
            {
                if(map[x][y+1]!='0')
                    return 0 ;
            }
            return 1 ;
        }
        return 0 ;
    }
    int can(int x,int y)
    {
        if(x!=xx && y!=yy)
            return 0 ;
        int flag=0 ;
        if(x==xx)
        {
            int minn=min(y,yy) ;
            int maxn=max(y,yy) ;
            for(int i=minn+1 ;i<maxn ;i++)
                if(map[x][i]!='0')
                    flag++ ;
        }
        if(y==yy)
        {
            int minn=min(x,xx) ;
            int maxn=max(x,xx) ;
            for(int i=minn+1 ;i<maxn ;i++)
                if(map[i][y]!='0')
                    flag++ ;
        }
        if(flag==1)
            return 1 ;
        return 0 ;
    }
    int main()
    {
        int n ;
        int x,y ;
        while(~scanf("%d%d%d%*c",&n,&x,&y))
        {
            if(n==0 && x==0 && y==0)
                break ;
            for(int i=0 ;i<11 ;i++)
                for(int j=0 ;j<11 ;j++)
                    map[i][j]='0' ;
            for(int i=0 ;i<n ;i++)
            {
                char chr ;
                int a,b ;
                //scanf("%c%d%d%*c",&chr,&a,&b) ;
                cin >> chr >> a >> b ;
                map[a][b]=chr ;
                if(chr=='G')
                {
                    RGX=a ;RGY=b ;
                }
            }
            //getchar() ;
            int flag ;
            for(int i=0 ;i<4 ;i++)
            {
                flag=0 ;
                xx=x+dir[i][0] ;
                yy=y+dir[i][1] ;
                if(xx<1 || xx>3){flag=1 ;continue ;}
                if(yy<4 || yy>6){flag=1 ;continue ;}
                if(!ok(xx,yy)){flag=1 ;continue ;}
                char t=map[xx][yy] ;
                map[xx][yy]='0' ;
                for(int j=1 ;j<=10 ;j++)
                {
                    for(int k=1 ;k<=9 ;k++)
                    {
                        if(map[j][k]=='R')
                        {
                            if(cha(j,k))
                                flag=1 ;    
                        }
                        if(map[j][k]=='H')
                        {
                            if(hor(j,k))
                                flag=1 ;
                        }
                        if(map[j][k]=='C')
                        {
                            if(can(j,k))
                                flag=1 ;
                        }
                    }
                }
                if(!flag)
                    break ;
                map[xx][yy]=t ;
             }
            if(flag)
                puts("YES") ;
            else
                puts("NO") ;
        }
        return 0 ;
    }
    View Code
  • 相关阅读:
    第一节:RestfulCRUD案例
    第三节:<mvc:annotationdriven />标签解析
    第二节:SpringMVC 的表单标签
    第一节:SpringMVC—数据绑定流程分析
    第四章:(2)Web开发 之 webjars&静态资源映射规则
    第三节:处理静态资源
    10.05
    四则运算二柱子1
    10.08
    10.02
  • 原文地址:https://www.cnblogs.com/xiaohongmao/p/3442146.html
Copyright © 2020-2023  润新知