模拟--poj1835宇航员的故事

这道题委实无语了,刚开始以为是很一般的方位模拟题,懒得看样例直接写的代码,然后敲了好几个switch结果样例居然没出来。。

仔细分析了样例之后才发现原来随着宇航员方位的改变他的左手方向以及头顶方向是跟着变的。。

然后就要时刻记录。。

方向感和想象力不行就只能在纸上画好久了 。。

无奈了。。

Time Limit:2000MS     Memory
Limit:
30000KB     64bit IO
Format:
%I64d & %I64u

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




代码

 1 //注意题意,左手位置和上方位置一直在变啊
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 #include<algorithm>
6 using namespace std;
7 int x,y,z,s,up,left;
8 struct ss{
9 char d[20];
10 int num;
11 };
12 void der(int num){
13
14 switch(s){
15 case 0 : x += num;break;
16 case 1 : y += num;break;
17 case 2 : z += num;break;
18 case 3 : x -= num;break;
19 case 4 : y -= num;break;
20 case 5 : z -= num;break;
21 }
22 //printf("x:%d y:%d z:%d s:%d\n",x,y,z,s);
23 }
24 void ice(char str[],int num){
25
26 if(strcmp(str,"back") == 0){
27 left = (left+3) % 6;
28 s = (s+3) % 6;
29 }
30 else if(strcmp(str,"left") == 0){
31 int k = s;
32 s = left;
33 left = (k+3) % 6;
34 }
35 else if(strcmp(str,"right") == 0){
36 int k = s;
37 s = (left+3) % 6;
38 left = k;
39 }
40 else if(strcmp(str,"up") == 0){
41 int k = up;
42 up = (s+3) % 6;
43 s = k;
44 }
45 else if(strcmp(str,"down") == 0){
46 int k = up;
47 up = s;
48 s = (k+3) % 6;
49 }
50 der(num);
51 }
52 int main(){
53 int n,m;
54 ss op[10004];
55 scanf("%d",&m);
56 while(m --){
57 x = y = z = s = 0;
58 left = 4;
59 up = 2;
60 scanf("%d",&n);
61 for(int i = 1; i <= n; i ++){
62 scanf("%s%d",op[i].d,&op[i].num);
63 ice(op[i].d,op[i].num);
64 }
65 printf("%d %d %d %d\n",x,y,z,s);
66
67 }
68 return 0;
69 }



时间: 2024-08-11 07:39:16

模拟--poj1835宇航员的故事的相关文章

POJ1835 宇航员 模拟

一道模拟题:http://poj.org/problem?id=1835 直接将宇航员当前方向.相对头顶方向.相对左边方向写出来即可. 代码如下: #include <iostream> #include <cstdio> #include <cstring> using namespace std; int main() { char s[10]; int t, step; scanf("%d", &t); while(t--) { int

【转载】POJ水题大集合

POJ水题大集合 poj1000:A+B problempoj1002:电话上按键对应着数字.现在给n个电话,求排序.相同的归一类poj1003:求最小的n让1+1/2+1/3+...+1/n大于给的一个实数poj1004:求一堆实数的平均数poj1005:由坐标 (0,0) 开始,以半圆为形状每年侵蚀50m^2,问(0,0)开始到(x,y)结束需要多长时间poj1006:三个周期是常数.现在给三个周期出现高峰的时候,问下一次出现高峰是什么时候poj1007:求字符串排序poj1008:一种日历

前端工程师如何月薪过4万

食指小心翼翼的按了一下Enter,提交了深夜前的最后一行代码,轻轻的将烟灰不是很熟悉的抖了几下,看了一眼窗外只有几盏孤独的路灯下的北京夜色突然间想起了什么,那是多年前键盘上的梦想.从事这个行业8年了,走到今天想把一路的经验和辛酸呈现给你们.也想静下心来,好好写点什么对得起这个标题. 1.我是谁? 可能你认识我,也可能你觉得对于敢写这样标题的我多少有些鄙夷.不过都希望你能耐心看完它.我跟你们一样,经历中国传统教育从小学中学高中大学,一直就像一个不倒翁一样一直被摆来摆去,小学的时候妈妈就会说你看人家

苹果iOS人机界面指南

iOS 8人机界面指南(二):设计策略 iOS 8人机界面指南(一):UI设计基础 打造出色 UI 的 7 个法则(上) 打造出色 UI 的 7 个法则(下) 用户界面原则 好的人机界面规范遵从于用户思考和行动的方式,而不屈从于设备的性能.一个缺乏吸引力,复杂的,或违悖逻辑的用户界面,却会让原本优秀的应用变得索然无味.反过来, 一个漂亮的,直觉感知的,引人入胜的界面能强化应用程序的功能,并且能在用户心中激发出正面的情绪. 整体之美 整体之美,并不是简单地指应用界面有多漂亮,而是指应用的外观和功能

hdu---(4515)小Q系列故事——世界上最遥远的距离(模拟题)

小Q系列故事——世界上最遥远的距离 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1751    Accepted Submission(s): 628 Problem Description 世界上最遥远的距离 不是生与死 而是我就站在你面前 你却不知道我爱你 世界上最遥远的距离 不是我就站在你面前你却不知道我爱你 而是明明知道彼此相爱

hdu4506 小明系列故事——师兄帮帮忙 (规律模拟+快速幂)

Problem Description http://acm.hdu.edu.cn/showproblem.php?pid=4506 小明自从告别了ACM/ICPC之后,就开始潜心研究数学问题了,一则可以为接下来的考研做准备,再者可以借此机会帮助一些同学,尤其是漂亮的师妹.这不,班里唯一的女生又拿一道数学题来请教小明,小明当然很高兴的就接受了.不过等他仔细读题以后,发现自己也不会做,这下小明囧了:如果回复说自己不懂,岂不是很没面子? 所以,他现在私下求你帮忙解决这道题目,题目是这样的: 给你n个

[OpenJudge] 宇航员(模拟)

03:宇航员 传送门 描述 问题描述: 宇航员在太空中迷失了方向,在他的起始位置现在建立一个虚拟xyz坐标系,称为绝对坐标系,宇航员正面的方向为x轴正方向,头顶方向为z轴正方向,则宇航员的初始状态如下图所示:现对六个方向分别标号,x,y,z正方向分别为0,1,2,负方向分别为3,4,5:称它们为绝对方向.宇航员在宇宙中只沿着与绝对坐标系xyz轴平行的方向行走,但是他不知道自己当前绝对坐标和自己面向的绝对方向. 任务描述: 请根据宇航员对自己在相对方向上移动的描述确定宇航员最终的绝对坐标和面向的绝

HDU4500 小Q系列故事——屌丝的逆袭【模拟】

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4500 题目大意: 工作室的布局是N*M的矩形,每个单位上有一名员工.每个位置由一个价值.每一个位置的 价值和其上.下.左.右四个邻居的魅力值有关.如果一个位置的邻居与这个位置的员工性别 不同,则该位置的价值总分加上这个邻居的魅力值,性别相同的话就下去邻居的魅力值.最终 得分就是这个位置的价值.(输入的时候,男生魅力值用负数表示,女生魅力值用正数表示) 那么问题来了:问哪个位置的魅力值最大,计算并输

HDU 4517 小小明系列故事---游戏的烦恼 (模拟题)

问题描述 : 小小明最近在玩一款游戏,它由n*m大小的矩阵构成,矩阵上会随机产生一些黑色的点,这些点它们可能会连在一起也可能会分开,这些点的个数没有限制,但是每个1*1方格中最多只可能有一个黑点产生.游戏要求玩家以最短的时间用x*y的小矩阵覆盖这个大矩阵,覆盖的要求有以下2点: 1.  x*y大小的小矩阵内必须有x*y个黑点. 2. 多个小矩阵可以重叠,但是每个小矩阵放置的位置必须是独一无二的,即不同的小矩阵内的黑点不能完全相同.例如1*2的矩阵可以横着放,也可以竖着放,这两种方法是不同的,即使