zoukankan      html  css  js  c++  java
  • POJ 2632 Crashing Robots【模拟题】

    208K 16MS 2379B 2013-02-10 23:04:05 1A 蛇年第一A 

    1》机器人有3种属性:横坐标x, 纵坐标y, 面向dir。因此用结构体存机器人的信息,规定E为0, N为1,w为2, S为3
    2》 如果是向前走:
    if(方向==0) x++; if(方向==1) y++; if(方向==2) x--; if(方向==3) y--;
    3》转弯:
    向走转n次:方向dir=(dir+n)%4;
    向右转n次:方向dir=(dir-n%4+4)%4;
    4》判断是否和别的机器人发生碰撞,int visit[i][j]=k,表示坐标为(x, y)处有机器人k
    5》为了处理方便且不影响后面的输入将M行指挥机器人的信息存在结构体内

    View Code
    #include<stdio.h>
    #include<string.h>
    char dirc[4]={'E', 'N', 'W', 'S'};
    int visit[105][105];
    struct Robot
    {
        int x, y, dir;
    };
    struct Minfor
    {
        int r, ti;
        char ai[5];
    };
    int main()
    {
        int T, n, m, a, b, i, j;
        char d[5];
        scanf("%d", &T);
        while(T--)
        {
            scanf("%d%d", &a, &b);
            scanf("%d%d", &n, &m);
            Robot R[105];
            Minfor MM[105];
            memset(visit, 0, sizeof(visit));
            for(i=1; i<=n; i++)
            {
                scanf("%d%d%s", &R[i].x, &R[i].y, d);
                if(d[0]=='E') R[i].dir=0;
                if(d[0]=='N') R[i].dir=1;
                if(d[0]=='W') R[i].dir=2;
                if(d[0]=='S') R[i].dir=3;
                visit[R[i].x][R[i].y]=i;
            }
            for(i=1; i<=m; i++)
                scanf("%d%s%d", &MM[i].r, MM[i].ai, &MM[i].ti);
            int flag=0;
            for(i=1; i<=m; i++)
            {
                int rr=MM[i].r;
                if(MM[i].ai[0]=='F')  //向前走 
                {
                    int xx=R[rr].x, yy=R[rr].y, dd=R[rr].dir;
                    visit[xx][yy]=0; //恢复现场
                    for(j=1; j<=MM[i].ti; j++)  //每走一步都会进行判断一下 
                    {
                        if(dd==0) xx++;
                        if(dd==1) yy++;
                        if(dd==2) xx--;
                        if(dd==3) yy--;
                        if(xx<1||xx>a||yy<1||yy>b)
                        {
                             flag=1;
                             printf("Robot %d crashes into the wall\n", rr);
                             break;
                        }
                        if(visit[xx][yy])
                        {
                            flag=1;
                            printf("Robot %d crashes into robot %d\n", rr, visit[xx][yy]);
                            break;
                        }
                    }   
                    if(flag)  break;
                    R[rr].x=xx, R[rr].y=yy; 
                    visit[xx][yy]=rr;
                }                
                if(MM[i].ai[0]=='L')
                {
                    int dd=R[rr].dir;
                    dd=(dd+MM[i].ti)%4;
                    R[rr].dir=dd;
                }
                if(MM[i].ai[0]=='R')
                {
                    int dd=R[rr].dir;
                    dd=(dd-MM[i].ti%4+4)%4;
                    R[rr].dir=dd;
                }
            } 
            if(i==m+1)
                printf("OK\n");
        }
        return 0;
    }    
  • 相关阅读:
    70.BOM
    69.捕获错误try catch
    68.键盘事件
    523. Continuous Subarray Sum
    901. Online Stock Span
    547. Friend Circles
    162. Find Peak Element
    1008. Construct Binary Search Tree from Preorder Traversal
    889. Construct Binary Tree from Preorder and Postorder Traversal
    106. Construct Binary Tree from Inorder and Postorder Traversal
  • 原文地址:https://www.cnblogs.com/Hilda/p/2909900.html
Copyright © 2011-2022 走看看