pku 1835 宇航员(好有意思啊)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

 

class PDCls
{
public:
    void init()
    {
        x = y = z = 0;
        forward = 0;
        right = 1;
        up = 2;
        backward = 3;
        left = 4;
        down = 5;
    }
    void pom(int dir, int dist)
    {
        switch(dir)
        {
            case 0: //forward
                x += dist;
                break;
            case 1: //right
                y += dist;
                break;
            case 2: //up
                z += dist;
                break;
            case 3: //backward
                x -= dist;
                break;
            case 4: //left
                y -= dist;
                break;
            case 5: //down
                z -= dist;
                break;
            default: break;
        }
    }
    void change(char dir, int dist)
    {
        PDCls tmp;
        switch(dir)
        {
            case 'f': //forward
                pom(forward, dist);
                break;
            case 'r': //right
                pom(right, dist);
                tmp = *this;

                tmp.forward = right;
                tmp.backward = left;
                tmp.left = forward;
                tmp.right = backward;
      //          tmp.up = up;
      //          tmp.down = down;

                *this = tmp;
                break;
            case 'u': //up
                pom(up, dist);
                tmp = *this;

                tmp.forward = up;
                tmp.backward = down;
                tmp.up = backward;
                tmp.down = forward;
      //          tmp.left = left;
      //          tmp.right = right;

                *this = tmp;
                break;
            case 'b': //backward
                pom(backward, dist);
                tmp = *this;

                tmp.forward = backward;
                tmp.backward = forward;
                tmp.right = left;
                tmp.left = right;
     //           tmp.up = up;
     //           tmp.down = down;

                *this = tmp;
                break;
            case 'l': //left
                pom(left, dist);
                tmp = *this;

                tmp.forward = left;
                tmp.backward = right;
                tmp.right = forward;
                tmp.left = backward;
    //            tmp.up = up;
    //            tmp.down = down;

                *this = tmp;
                break;
            case 'd': //down
                pom(down, dist);
                tmp = *this;

                tmp.forward = down;
                tmp.backward = up;
                tmp.up = forward;
                tmp.down = backward;
     //           tmp.left = left;
     //           tmp.right = right;

                *this = tmp;
                break;
            default: break;
        }
    }
    void print()
    {
        printf("%d %d %d %d\n", x, y, z, forward);
    }
private:
    int x, y, z;
    int up, down, left, right, forward, backward;
};

PDCls now;

void solve(const int N)
{
    now.init();
    char cmd[10];
    int i, len;

    for(i = 0; i < N; i++)
    {
        scanf("%s %d", cmd, &len);
        now.change(cmd[0], len);
      //  now.print(); system("pause");
    }
    now.print();
}

int main()
{
    #ifndef ONLINE_JUDGE
    freopen("indata.txt", "r", stdin);
    #endif

    int T;
    scanf("%d", &T);
    while(T--)
    {
        int n;
        scanf("%d", &n);
        solve(n);
    }
    return 0;
}

posted @ 2010-11-14 18:14  菜到不得鸟  阅读(175)  评论(0)    收藏  举报