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

    该题是个纯模拟题,只要仔细模拟就可以了,刚开始的时候自己按照自己的想法把行列关系进行了更改,结果弄得方向错乱。该证后AC。

    代码如下:

    #include <cstring>
    #include <cstdio>
    #include <cstdlib>
    #define MAXN 105
    using namespace std;
    
    int A, B, N, M, x[MAXN], y[MAXN], d[MAXN];
    int G[MAXN][MAXN];
    int dir[4][2] = {-1, 0, 0, 1, 1, 0, 0, -1};
    char box[MAXN]; // 接受信息
    
    struct Message
    {
        int No, times;
        char op[3];    
    }m;
    
    bool update(int &who, int &kind)
    {
        if (m.op[0] == 'L') { // 左转 
            d[m.No] = (d[m.No] - m.times + 120) % 4;
        }
        else if (m.op[0] == 'R') {  // 右转 
            d[m.No] = (d[m.No] + m.times) % 4;
        }
        else {  // 前进
            while (m.times--) {
                G[x[m.No]][y[m.No]] = 0;
                int xx = (x[m.No] += dir[ d[m.No] ][0]);
                int yy = (y[m.No] += dir[ d[m.No] ][1]);
                if (xx < 1 || xx > A || yy < 1 || yy > B) {
                    kind = 1;
                    return true;
                }
                else if (G[xx][yy] != 0) {
                    kind = 2;
                    who = G[xx][yy];
                    return true;
                }
                else {
                    G[xx][yy] = m.No;
                }
            }
        }
        return false;
    }
    
    int main()
    {
        int T;
        bool over;
        char temp[3];
        scanf("%d", &T);
        while (T--) {
            memset(G, 0, sizeof (G));
            box[0] = 'O', box[1] = 'K', box[2] = '\0';
            over = false;
            scanf("%d %d", &A, &B); // A 为宽,B为高
            scanf("%d %d", &N, &M); // N 为机器人的个数, M为指令的条数 
            for (int i = 1; i <= N; ++i) {
                scanf("%d %d %s", &x[i], &y[i], temp);
                G[x[i]][y[i]] = i;
                switch (temp[0]) {
                    case 'W': d[i] = 0; break;
                    case 'N': d[i] = 1; break;
                    case 'E': d[i] = 2; break;
                    case 'S': d[i] = 3; break;
                }
            } 
            while (M--) {
                int who, kind;
                scanf("%d %s %d", &m.No, m.op, &m.times);
                if (over) {
                    continue;
                }
                if (update(who, kind)) {
                    over = true;
                    if (kind == 1) {
                        sprintf(box, "Robot %d crashes into the wall", m.No);
                    }
                    else {
                        sprintf(box, "Robot %d crashes into robot %d", m.No, who);
                    }
                }
            }
            puts(box);
        }
        return 0;    
    }
  • 相关阅读:
    mysql的统计函数(聚合函数)
    mysql中的五子查询
    mysql-蠕虫复制--快速插入数据
    mysql 外键的使用
    我的mysql入门笔记
    阿里云官方 Centos7 源码安装 LAMP环境
    xml格式数据转excel
    mysql的安装配置
    sublime中,怎么把所有的函数代码都折叠起来?
    点击文字或按钮弹出一个DIV窗口(DIV悬浮窗口)
  • 原文地址:https://www.cnblogs.com/Lyush/p/2570416.html
Copyright © 2011-2022 走看看