zoukankan      html  css  js  c++  java
  • POJ

    http://poj.org/problem?id=2632

    模拟起来还是蛮麻烦的。

    不过总比一堆函数好。

    #include<algorithm>
    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<map>
    #include<set>
    #include<stack>
    #include<string>
    #include<queue>
    #include<vector>
    using namespace std;
    typedef long long ll;
    
    int dx[] = {-1, 0, +1, 0, -1};
    int dy[] = {-1, +1, 0, -1, 0};
    
    struct _1Nd {
        int id;
        int dir;
        _1Nd() {
            id = 0;
            dir = 0;
        }
    } _1nd[105][105];
    
    int a, b;
    bool out;
    
    int rx[105], ry[105];
    
    void show() {
        for(int i = 1; i <= a; ++i) {
    
            for(int j = 1; j <= b; ++j) {
                printf("%d", _1nd[i][j].dir);
            }
            printf("
    ");
        }
        printf("---
    ");
    }
    
    
    void Move(int id, int w) {
        if(out == 1)
            return;
        while(w--) {
            //printf("w=%d
    ",w);
            int i = rx[id], j = ry[id];
            int di = dx[_1nd[i][j].dir];
            int dj = dy[_1nd[i][j].dir];
            if(i + di < 1 || j + dj < 1 || i + di > a || j + dj > b) {
                out = 1;
                printf("Robot %d crashes into the wall
    ", _1nd[i][j].id);
                return;
            } else {
                if(_1nd[i + di][j + dj].id) {
                    out = 1;
                    printf("Robot %d crashes into robot %d
    ", _1nd[i][j].id, _1nd[i + di][j + dj].id);
                    return;
                } else {
                    _1nd[i + di][j + dj] = _1nd[i][j];
                    _1nd[i][j] = _1nd[0][0];
                }
            }
            rx[id] += di;
            ry[id] += dj;
            //show();
        }
    }
    
    void Rotate(int id, int w, int d) {
        if(out == 1)
            return;
        int i = rx[id], j = ry[id];
        w %= 4;
        while(w--) {
            _1nd[i][j].dir += d;
            if(_1nd[i][j].dir == 5)
                _1nd[i][j].dir = 1;
            if(_1nd[i][j].dir == 0)
                _1nd[i][j].dir = 4;
            //show();
        }
    }
    
    int main() {
    #ifdef Yinku
        freopen("Yinku.in", "r", stdin);
    #endif // Yinku
        int t;
        scanf("%d", &t);
        while(t--) {
            out = 0;
            scanf("%d%d", &b, &a);
            for(int i = 1; i <= a; ++i) {
                for(int j = 1; j <= b; ++j)
                    _1nd[i][j] = _1nd[0][0];
            }
            int n, m;
            scanf("%d%d", &n, &m);
            for(int i = 1; i <= n; ++i) {
                scanf("%d%d", &ry[i], &rx[i]);
                rx[i] = a - rx[i] + 1;
                _1nd[rx[i]][ry[i]].id = i;
                char dir[2];
                scanf("%s", dir);
                if(dir[0] == 'E')
                    _1nd[rx[i]][ry[i]].dir = 1;
                else if(dir[0] == 'S')
                    _1nd[rx[i]][ry[i]].dir = 2;
                else if(dir[0] == 'W')
                    _1nd[rx[i]][ry[i]].dir = 3;
                else
                    _1nd[rx[i]][ry[i]].dir = 4;
            }
            //show();
            while(m--) {
                int id, w;
                char op[2];
                scanf("%d%s%d", &id, op, &w);
                if(op[0] == 'F') {
                    Move(id, w);
                } else if(op[0] == 'L') {
                    Rotate(id, w, -1);
                } else {
                    Rotate(id, w, 1);
                }
            }
            if(out == 0)
                puts("OK");
        }
    }
    
  • 相关阅读:
    gulp常用插件之gulp-plumber使用
    gulp常用插件之gulp-load-plugins使用
    gulp常用插件之yargs使用
    ql自动化测试之路-概述篇
    ql的python学习之路-day11
    ql的python学习之路-day10
    ql的python学习之路-day9
    python实现简易工资管理系统(Salary Manage)源码
    python控制台实现打印带颜色的字体
    ql的python学习之路-day8
  • 原文地址:https://www.cnblogs.com/Inko/p/11719214.html
Copyright © 2011-2022 走看看