poj 1835 宇航员

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

宇航员
Time Limit: 2000MS   Memory Limit: 30000K
Total Submissions: 4802   Accepted: 2058

Description

问题描述: 
  宇航员在太空中迷失了方向,在他的起始位置现在建立一个虚拟xyz坐标系,称为绝对坐标系,宇航员正面的方向为x轴正方向,头顶方向为z轴正方向,则宇航员的初始状态如下图所示: 

现对六个方向分别标号,x,y,z正方向分别为0,1,2,负方向分别为3,4,5;称它们为绝对方向。宇航员在宇宙中只沿着与绝对坐标系xyz轴平行的方向行走,但是他不知道自己当前绝对坐标和自己面向的绝对方向。 

任务描述: 
  请根据宇航员对自己在相对方向上移动的描述确定宇航员最终的绝对坐标和面向的绝对方向。对在相对方向上移动的描述及意义如下: 
forward x  向前走x米。 
back x 先转向后,再走x米。 
left x 先转向左,再走x米。 
right x 先转向右,再走x米。 
up x 先面向上,再走x米。 
down x 先面向下,再走x米。 
其中向上和向下如下图所示: 

Input

第一行一个正整数m,表示测试数据的组数。每组测试数据第一行是一个正整数n(1<=n<=10000)表示宇航员行走的次数,下面n行每行输入一次相对行走,格式如上所述,其中( 1 <= x <= 10000 为正整数)。

Output

对于每组输入数据输出一行,x y z p, 中间用空格隔开,x y z是宇航员的位置的绝对坐标,p是宇航员面向的绝对方向编号(0<=p <=5)。

Sample Input

1
6
left 10
right 11
up 12
down 13
forward 14
back 15

Sample Output

23 -10 12 3

Source

 
 
分析:
暴力模拟每种状态。
 
 
AC代码:
  1 #include<cstdio>
  2 #include<algorithm>
  3 #include<cstring>
  4 #include<queue>
  5 #include<iostream>
  6 #include<stack>
  7 #include<map>
  8 #include<string>
  9 using namespace std;
 10 int main(){
 11     char ch[20];
 12     int n, t, tcase;
 13     scanf("%d", &tcase);
 14     while(tcase--){
 15         scanf("%d", &n);
 16         int face, head, x, y, z, num;
 17         x = y = z = face = 0;
 18         head = 2;
 19         for(int i = 0; i < n; i++){
 20             scanf("%s%d", ch, &num);
 21             if(ch[0] == 'f'){
 22                 if(face == 0) x += num;
 23                 if(face == 1) y += num;
 24                 if(face == 2) z += num;
 25                 if(face == 3) x -= num;
 26                 if(face == 4) y -= num;
 27                 if(face == 5) z -= num;
 28             }
 29             else if(ch[0] == 'b'){
 30                 face = (face+3)%6;
 31                 if(face == 0) x += num;
 32                 if(face == 1) y += num;
 33                 if(face == 2) z += num;
 34                 if(face == 3) x -= num;
 35                 if(face == 4) y -= num;
 36                 if(face == 5) z -= num;
 37             }
 38             else if(ch[0] == 'l'){
 39                 if(face == 0 && head == 1) face = 2;
 40                 else if(face == 0 && head == 4) face = 5;
 41                 else if(face == 0 && head == 2) face = 4;
 42                 else if(face == 0 && head == 5) face = 1;
 43                 
 44                 else if(face == 1 && head == 0) face = 5;
 45                 else if(face == 1 && head == 3) face = 2;
 46                 else if(face == 1 && head == 2) face = 0;
 47                 else if(face == 1 && head == 5) face = 3;
 48                 
 49                 else if(face == 2 && head == 0) face = 1;
 50                 else if(face == 2 && head == 3) face = 4;
 51                 else if(face == 2 && head == 1) face = 3;
 52                 else if(face == 2 && head == 4) face = 0;
 53                 
 54                 else if(face == 3 && head == 1) face = 5;
 55                 else if(face == 3 && head == 4) face = 2;
 56                 else if(face == 3 && head == 2) face = 1;
 57                 else if(face == 3 && head == 5) face = 4;
 58                 
 59                 else if(face == 4 && head == 0) face = 2;
 60                 else if(face == 4 && head == 3) face = 5;
 61                 else if(face == 4 && head == 2) face = 3;
 62                 else if(face == 4 && head == 5) face = 0;
 63                 
 64                 else if(face == 5 && head == 0) face = 4;
 65                 else if(face == 5 && head == 3) face = 1;
 66                 else if(face == 5 && head == 4) face = 3;
 67                 else if(face == 5 && head == 1) face = 0;
 68                 
 69                 if(face == 0) x += num;
 70                 if(face == 1) y += num;
 71                 if(face == 2) z += num;
 72                 if(face == 3) x -= num;
 73                 if(face == 4) y -= num;
 74                 if(face == 5) z -= num;
 75             }
 76             else if(ch[0] == 'r'){
 77                 if(face == 0 && head == 1) face = 5;
 78                 else if(face == 0 && head == 4) face = 2;
 79                 else if(face == 0 && head == 2) face = 1;
 80                 else if(face == 0 && head == 5) face = 4;
 81                 
 82                 else if(face == 1 && head == 0) face = 2;
 83                 else if(face == 1 && head == 3) face = 5;
 84                 else if(face == 1 && head == 2) face = 3;
 85                 else if(face == 1 && head == 5) face = 0;
 86                 
 87                 else if(face == 2 && head == 0) face = 4;
 88                 else if(face == 2 && head == 3) face = 1;
 89                 else if(face == 2 && head == 1) face = 0;
 90                 else if(face == 2 && head == 4) face = 3;
 91                 
 92                 else if(face == 3 && head == 1) face = 2;
 93                 else if(face == 3 && head == 4) face = 5;
 94                 else if(face == 3 && head == 2) face = 4;
 95                 else if(face == 3 && head == 5) face = 1;
 96                 
 97                 else if(face == 4 && head == 0) face = 5;
 98                 else if(face == 4 && head == 3) face = 2;
 99                 else if(face == 4 && head == 2) face = 0;
100                 else if(face == 4 && head == 5) face = 3;
101                 
102                 else if(face == 5 && head == 0) face = 1;
103                 else if(face == 5 && head == 3) face = 4;
104                 else if(face == 5 && head == 4) face = 0;
105                 else if(face == 5 && head == 1) face = 3;
106                 
107                 if(face == 0) x += num;
108                 if(face == 1) y += num;
109                 if(face == 2) z += num;
110                 if(face == 3) x -= num;
111                 if(face == 4) y -= num;
112                 if(face == 5) z -= num;
113             }
114             else if(ch[0] == 'u'){
115                 t = face;
116                 face = head;
117                 head = (t+3)%6;
118                 if(face == 0) x += num;
119                 if(face == 1) y += num;
120                 if(face == 2) z += num;
121                 if(face == 3) x -= num;
122                 if(face == 4) y -= num;
123                 if(face == 5) z -= num;
124             }
125             else if(ch[0] == 'd'){
126                 t = face;
127                 face = (head+3)%6;
128                 head = t;
129                 if(face == 0) x += num;
130                 if(face == 1) y += num;
131                 if(face == 2) z += num;
132                 if(face == 3) x -= num;
133                 if(face == 4) y -= num;
134                 if(face == 5) z -= num;
135             }
136             //printf("%d %d %d %d %d
", x, y, z, face, head);
137         }
138         printf("%d %d %d %d
", x, y, z, face);
139     }
140     return 0;
141 }
原文地址:https://www.cnblogs.com/jeff-wgc/p/4482994.html