zoukankan      html  css  js  c++  java
  • UVA-1589 Xiangqi

    以前做的题,写的丑,肯定可以优化,但是做过的题不想再看了,直接粘代码。

    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    using namespace std;
    int f[11][10]={},ri[41]={},rj[41]={};
    int num,bi,bj;
    char c[41]={};
    int judge(int i,int j);
    int main()
    {
        //freopen("in.txt","r",stdin);
        //freopen("out.txt","w",stdout);
        while(cin>>num>>bi>>bj)
        {
            if(num==0&&bi==0&&bj==0)
                break;
            memset(f,0,sizeof(f));
            memset(ri,0,sizeof(ri));
            memset(rj,0,sizeof(rj));
            for(int i=1;i<=num;i++)
            {
                cin>>c[i]>>ri[i]>>rj[i];
                f[ri[i]][rj[i]]=i;
            }
            int flag=0;
            if(bi-1>=1&&!flag)
                flag=judge(bi-1,bj);
            if(bi+1<=3&&!flag)
                flag=judge(bi+1,bj);
            if(bj-1>=4&&!flag)
                flag=judge(bi,bj-1);
            if(bj+1<=6&&!flag)
                flag=judge(bi,bj+1);
            if(flag==1)
                cout<<"NO"<<endl;
            else
                cout<<"YES"<<endl;
            string s;
            getline(cin,s);
        }
    }
    int judge(int x,int y)
    {
        if(f[x][y]!=0)
        {
            c[f[x][y]]=' ';
            f[x][y]=-1;
        }
        for(int i=1;i<=num;i++)
        {
            if(c[i]=='G')
            {
                if(rj[i]==y)
                {
                    int sum=0;
                    for(int ii=bi+1;ii<=ri[i]-1;ii++)
                    {
                        if(f[ii][y]>0)
                            sum++;
                    }
                    if(sum==0)
                        return 0;
                }
            }
            if(c[i]=='R')
            {
                if(ri[i]==x)
                {
                    int sum=0;
                    if(rj[i]<y-1)
                    {
                        for(int ii=rj[i]+1;ii<=y-1;ii++)
                        {
                            if(f[x][ii]>0)
                                sum++;
                        }
                    }
                    else if(rj[i]>y+1)
                    {
                        for(int ii=y+1;ii<=rj[i]-1;ii++)
                        {
                            if(f[x][ii]>0)
                                sum++;
                        }
                    }
                    if(sum==0)
                        return 0;
                }
                else if(rj[i]==y)
                {
                    int sum=0;
                    if(ri[i]<x-1)
                    {
                        for(int ii=ri[i]+1;ii<x-1;ii++)
                        {
                            if(f[ii][y]>0)
                                sum++;
                        }
                    }
                    else if(ri[i]>x+1)
                    {
                        for(int ii=x+1;ii<=ri[i]-1;ii++)
                        {
                            if(f[ii][y]>0)
                                sum++;
                        }
                    }
                    if(sum==0)
                        return 0;
                }
            }
            if(c[i]=='H')
            {
                if(f[ri[i]-1][rj[i]]==0)
                {
                    if((x==ri[i]-2)&&(y==rj[i]+1||y==rj[i]-1))
                        return 0;
                }
                if(f[ri[i]+1][rj[i]]==0)
                {
                    if((x==ri[i]+2)&&(y==rj[i]+1||y==rj[i]-1))
                        return 0;
                }
                if(f[ri[i]][rj[i]-1]==0)
                {
                    if((y==rj[i]-2)&&(x==ri[i]+1||x==ri[i]-1))
                        return 0;
                }
                if(f[ri[i]][rj[i]+1]==0)
                {
                    if((y==rj[i]+2)&&(x==ri[i]+1||x==ri[i]-1))
                        return 0;
                }
            }
            if(c[i]=='C')
            {
                if(ri[i]==x)
                {
                    int sum=0;
                    if(rj[i]<y-1)
                    {
                        for(int ii=rj[i]+1;ii<=y-1;ii++)
                        {
                            if(f[x][ii]>0)
                                sum++;
                        }
                    }
                    else if(rj[i]>y+1)
                    {
                        for(int ii=y+1;ii<=rj[i]-1;ii++)
                        {
                            if(f[x][ii]>0)
                                sum++;
                        }
                    }
                    if(sum==1)
                        return 0;
                }
                else if(rj[i]==y)
                {
                    int sum=0;
                    if(ri[i]<x-1)
                    {
                        for(int ii=ri[i]+1;ii<x-1;ii++)
                        {
                            if(f[ii][y]>0)
                                sum++;
                        }
                    }
                    else if(ri[i]>x+1)
                    {
                        for(int ii=x+1;ii<=ri[i]-1;ii++)
                        {
                            if(f[ii][y]>0)
                                sum++;
                        }
                    }
                    if(sum==1)
                        return 0;
                }
            }
        }
        return 1;
    }
  • 相关阅读:
    SAS的初级入门(六)
    SAS的初级入门(五)
    SAS的初级入门(四)
    SAS的初级入门(三)
    Deep Learning 的阅读笔记(一)
    SAS的初级入门(二)
    SAS的初级入门(一)
    Linux使用shell脚本监控
    Python中正则表达式的巧妙使用
    140种Python标准库、第三方库和外部工具
  • 原文地址:https://www.cnblogs.com/windrises/p/4653048.html
Copyright © 2011-2022 走看看