poj2632_(模拟法)

题目


贴的代码,这题我写了一下午了,无语了不想在做了

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

const int maxn = 100 + 10;

int G[maxn][maxn];

int dx[] = {0, 1, 0, -1};
int dy[] = {1, 0, -1, 0};

struct Robots{
    int x, y, d;
}r[100+10];

int main(){
    int A, B, n, m, T, flag, rob, cra_rob;
    char s[5];

    scanf("%d", &T);

    while(T--) {
        flag = 0;

        memset(G, 0, sizeof(G));

        scanf("%d %d", &A, &B);
        scanf("%d %d", &n, &m);

        for(int i=1; i<=n; i++) {
            scanf("%d %d", &r[i].x, &r[i].y);
            scanf("%s", s);
            G[r[i].y][r[i].x] = i;

            switch(s[0]) {
            case 'N': r[i].d = 0; break;
            case 'E': r[i].d = 1; break;
            case 'S': r[i].d = 2; break;
            case 'W': r[i].d = 3; break;
            }
        }

        int num, rep;
        char act[3];

        while(m--) {
            scanf("%d %s %d", &num, act, &rep);
            if(!flag) {
                if(act[0] == 'L') r[num].d = ((r[num].d - rep)%4+4)%4;
                else if(act[0] == 'R') r[num].d = (r[num].d + rep) % 4;
                else {
                    G[r[num].y][r[num].x] = 0;
                    for(int i=0; i<rep; i++) {
                        r[num].x += dx[r[num].d];
                        r[num].y += dy[r[num].d];

                        if(r[num].x <= 0 || r[num].y <= 0 || r[num].x > A || r[num].y > B) {
                             rob = num;
                             flag = 1;
                             break;
                        } else if(G[r[num].y][r[num].x]) {
                            rob = num;
                            cra_rob = G[r[num].y][r[num].x];
                            flag = 2;
                            break;
                        }
                    }

                    if(!flag) G[r[num].y][r[num].x] = num;
                }
            }
        }

        if(flag == 1) printf("Robot %d crashes into the wall\n", rob);
        else if(flag == 2) printf("Robot %d crashes into robot %d\n", rob, cra_rob);
        else printf("OK\n");
    }

    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值