POJ 1835 宇航员 (模拟&三维向量旋转)
宇航员http://poj.org/problem?id=1835
Time Limit: 2000MS
Memory Limit: 30000K
Description
问题描述:

Input
第一行一个正整数m,表示测试数据的组数。每组测试数据第一行是一个正整数n(1<=n<=10000)表示宇航员行走的次数,下面n行每行输入一次相对行走,格式如上所述,其中( 1 <= x <= 10000 为正整数)。Output
对于每组输入数据输出一行,x y z p, 中间用空格隔开,x y z是宇航员的位置的绝对坐标,p是宇航员面向的绝对方向编号(0<=p <=5)。Sample Input
16left 10right 11up 12down 13forward 14back 15
Sample Output
23 -10 12 3
/*172ms,356KB*/#include<cstdio>char s[10];int main(){int t, n;int x, y, z, face, left, ver, temp, d; ///ver:verticalscanf("%d", &t);while (t--){scanf("%d", &n);x = y = z = 0;face = 0, left = 4, ver = 2;while (n--){scanf("%s %d", s, &d);if (s[0] == 'b') face = (face + 3) % 6, left = (left + 3) % 6;else if (s[0] == 'l') temp = face, face = left, left = (temp + 3) % 6;else if (s[0] == 'r') temp = left, left = face, face = (temp + 3) % 6;else if (s[0] == 'u') temp = face, face = ver, ver = (temp + 3) % 6;else if (s[0] == 'd') temp = ver, ver = face, face = (temp + 3) % 6;if (face == 0) x += d;else if (face == 1) y += d;else if (face == 2) z += d;else if (face == 3) x -= d;else if (face == 4) y -= d;else z -= d; ///face == 5}printf("%d %d %d %d\n", x, y, z, face);}return 0;}