zoukankan      html  css  js  c++  java
  • POJ2632-Crashing Robots(模拟)

    题目详情点此查看
    花了近一个小时,总算是AC了,
    其实这题比较简单,没啥算法,题目详情点击链接;
    主要由以下事项:
    1.我用的是二维数组,然后其(0, 0)点的位置与直角坐标系的远点位置恰好相反,因此处理数据时要特别注意。
    2.最后提交时还出现了了WA, 然后一检查,我的天呐,我尽然把OK写成了小写的。。。。。。。

    code:

    //***************
    //memory  time
    // 288K    16MS
    
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    class Pos{
        public:
            int x, y, d;    //robot的位置信息, d为方向,0, 1, 2, 3对应东北西南 
    };
    
    int direction[4][2] = {0, 1, -1, 0, 0, -1, 1, 0};    //此数组记录方向,方便运算 
    
    Pos pos[102];
    
    int main() {
        //ifstream in("data2632.in");
        int k;
        cin >> k;
        while(k --)  { 
            int map[101][101] = {0};
            int A, B, N, M;
            cin >> B >> A >> N >> M;
            for (int i = 1; i <= N; i ++)  {
                int x, y;
                char d;
                cin >> y >> x >> d;
                map[A- x + 1][y] = i;
                pos[i].x = A - x + 1;
                pos[i].y = y;
                switch(d)  {
                    case 'E':
                        pos[i].d = 0;
                        break;
                    case 'N':
                        pos[i].d = 1;
                        break;
                    case 'W':
                        pos[i].d = 2;
                        break;
                    case 'S':
                        pos[i].d = 3;
                        break;
                }
            }
            bool ok = true;
    
            while (M --)  {
                int num, times;
                char action;
                cin >> num >> action >> times;
                if(action == 'F' && ok) {
                    while(times --) {
                        int x = pos[num].x;
                        int y = pos[num].y;
                        pos[num].x += direction[pos[num].d][0];
                        pos[num].y += direction[pos[num].d][1];     
                        map[x][y] = 0;
                        x = pos[num].x;
                        y = pos[num].y;
                        if(x < 1 || y < 1 || x > A || y > B) {
                            cout << "Robot " << num << " crashes into the wall" << endl; 
                            //M = 0;
                            ok = false;
                            break;
                        }
                        else if(map[x][y] != 0) {
                            cout << "Robot " << num << " crashes into robot " << map[x][y] << endl;
                            //M = 0;
                            ok = false;
                            break;
                        }
                        else  {
                            map[x][y] = num;
                        }
                    }       
                }
                else {
                    times %= 4;
                    pos[num].d += 4;
                    if(action == 'L') {
                        pos[num].d += times;
                    }   
                    else {
                        pos[num].d -= times;
                    }
                    pos[num].d %= 4;
                }
            }
            if(ok) {
                cout << "OK" << endl;           
            }
        }
        return 0;
    }
    

      

    附加测试数据:
    Sample Input
    8
    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
    9 5
    5 19
    2 4 E
    4 3 N
    6 2 E
    9 5 S
    9 1 W
    4 F 1
    4 R 1
    4 F 6
    4 L 5
    4 F 3
    4 L 1
    5 R 1
    5 F 3
    5 L 1
    5 F 2
    5 L 1
    5 F 3
    5 R 5
    5 F 2
    5 R 1
    5 F 2
    4 F 2
    4 L 1
    4 F 3
    9 5
    2 6
    9 5 S
    9 1 W
    1 F 1
    1 R 1
    1 F 2
    2 F 2
    2 R 1
    2 F 3
    5 4
    2 2
    1 1 E
    5 4 W
    1 R 1
    1 F 2
    5 4
    2 2
    1 1 E
    5 4 W
    1 L 1
    1 F 2

    Sample Output
    Robot 1 crashes into the wall
    Robot 1 crashes into robot 2
    OK
    Robot 1 crashes into robot 2
    Robot 4 crashes into robot 5
    Robot 2 crashes into robot 1
    Robot 1 crashes into the wall
    OK

  • 相关阅读:
    币值转换
    打印沙漏
    秋季学期总结
    在人生道路上对我影响最大一位老师
    自我介绍
    python笔记十五(面向对象及其特性)
    python笔记十四(高阶函数——map/reduce、filter、sorted)
    python笔记十三(高阶函数、装饰器)
    python笔记十二(匿名函数)
    Python笔记十一(迭代器)
  • 原文地址:https://www.cnblogs.com/topk/p/6580122.html
Copyright © 2011-2022 走看看