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;
}
浙公网安备 33010602011771号