http://poj.org/problem?id=2632
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 7470 | Accepted: 3265 | 
Description
Input
 Output
Sample Input
4 5 4 2 2 1 1 E 5 4 W 1 F 7 2 F 7 5 4 2 4 1 1 E 5 4 W 1 F 3 2 F 1 1 L 1 1 F 3 5 4 2 2 1 1 E 5 4 W 1 L 96 1 F 2 5 4 2 3 1 1 E 5 4 W 1 F 4 1 L 1 1 F 20
Sample Output
Robot 1 crashes into the wall Robot 1 crashes into robot 2 OK Robot 1 crashes into robot 2
Source
#include<cstdio>
#include<cstring>
struct point
{
    int x,y;
    char c;
}f[105];
struct node
{
    int x,y;
    char c;
}ff[105];
int a,b,n,m;
bool check(int k)  //推断函数,開始就是有点卡这里
{
    int i;
    if(f[k].x<=0||f[k].x>a||f[k].y<=0||f[k].y>b) //跟墙碰撞
    {
        printf("Robot %d crashes into the wall\n",k);
        return 1;
    }
    for(i=1;i<=n;i++)   //跟其他机器人碰撞
    {
        if(i==k) continue;
        if(f[k].x==f[i].x&&f[k].y==f[i].y)
        {
           printf("Robot %d crashes into robot %d\n",k,i);
           return 1;
        }
    }
    return 0;
}
int main()
{
    //freopen("a.txt","r",stdin);
    int t,i,j,l,k,flag;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d%d%d",&a,&b,&n,&m);
        for(i=1;i<=n;i++)
        {
            scanf("%d%d %c",&f[i].x,&f[i].y,&f[i].c);
            //printf("%d%d%c\n",f[i].x,f[i].y,f[i].c);
        }
        flag=0;
        for(i=1;i<=m;i++)
        {
            scanf("%d %c %d",&ff[i].x,&ff[i].c,&ff[i].y);
            //printf("%d%c%d\n",ff[i].x,ff[i].c,ff[i].y);
            //
            k=ff[i].x;
            if(ff[i].c=='L')
            {
                l=ff[i].y%4; //4个方向一个周期  看剩下多少步
                for(j=1;j<=l;j++)
                {
                    if(f[k].c=='N')
                        f[k].c='W';
                    else if(f[k].c=='E')
                        f[k].c='N';
                    else if(f[k].c=='S')
                        f[k].c='E';
                    else if(f[k].c=='W')
                        f[k].c='S';
                }
            }
            else if(ff[i].c=='R')  
            {
                l=ff[i].y%4; //同理
                for(j=1;j<=l;j++)
                {
                    if(f[k].c=='N')
                        f[k].c='E';
                    else if(f[k].c=='E')
                        f[k].c='S';
                    else if(f[k].c=='S')
                        f[k].c='W';
                    else if(f[k].c=='W')
                        f[k].c='N';
                }
            }
            else
            {
                l=ff[i].y;
                if(!flag)   //仅仅须要推断一次即可。
                {
                for(j=1;j<=l;j++)
                {
                    if(f[k].c=='N')
                    {
                        f[k].y++;
                        flag=check(k);
                        if(flag)break;
                    }
                    else if(f[k].c=='W')
                    {
                        f[k].x--;
                        flag=check(k);
                        if(flag)break;
                    }
                    else if(f[k].c=='S')
                    {
                        f[k].y--;
                        flag=check(k);
                        if(flag) break;
                    }
                    else if(f[k].c=='E')
                    {
                        f[k].x++;
                        flag=check(k);
                        if(flag)break;
                    }
                }
                }
            }
        }
        if(!flag) printf("OK\n");
    }
    return 0;
}
版权声明:本文博主原创文章,博客,未经同意不得转载。
原文:http://www.cnblogs.com/yxwkf/p/4853259.html