第五届图灵杯1869

来源:互联网 发布:英语课上配音软件 编辑:程序博客网 时间:2024/06/08 09:57

1869: Harry Potter and the Prisoner of Azkaban

描述

题目描述:

Viewsetting又看了一部哈利波特系列电影:Harry Potter and the Prisoner of Azkaban(哈利·波特与阿兹卡班的囚徒)。电影里出现了一个魔法道具:活点地图。乍看之下,这张地图只是一张空白的羊皮纸;但是当使用者说出“我庄严宣誓我没干好事”(“我庄严宣誓我不怀好意”I solemnly swear that I am up to no good) ,墨线就会开始延伸,浮现出一张霍格沃茨的地图(包括秘密通道)。地图上有霍格沃茨里每个人所在的位置,并指示打开秘密通道的方法。使用完毕之后,只要说“恶作剧完毕”(Mischief managed),就可以将地图复原成空白的状态,以防止其他不知道地图口令的人使用。活点地图是莱姆斯·卢平、小矮星彼得、小天狼星布莱克以及詹姆·波特(哈利的爸爸)共同发明的,专门用来达成恶作剧。他们在就寝时间后,常常化身为动物四处探险,使得他们对霍格沃茨的地下通道有很多了解(布莱克,小矮星和波特是阿尼马格斯,而卢平是狼人。)他们将所发现的秘密通道,制作成活点地图。地图上写著这几位创造者的名字,他们采用仅限彼此所知的昵称(代表他们幻化成的动物):月亮脸(指身为狼人的卢平),虫尾巴(指小矮星,化身成老鼠),大脚板(布莱克,化身成狗),以及尖头叉子(波特,化身为雄鹿)。而这也是活点地图标题的由来。  哈利波特用这张地图可以说是开了外挂,游戏体验++,然而斯内普发现了哈利有这张地图,并且试图找出其中的秘密,但却被地图羞辱了一顿。卢平教授表示他会调查,就将地图带走了。可是现在哈利波特特别需要这张地图,于是他找到了你,帮他完成这个魔法地图。但是你只是一个麻瓜(不会膜法的普通人类),那里会这些骚操作?但是你可是会计算机的大手子啊!你就拥有那些魔法师眼中的“黑魔法”!请你编写一个程序,同样也能实现这个地图的功能。

输入:

输入一个n(n<=999),代表记录中有n个魔法师。接下来n行,每行依次输入魔法师的名字,起始坐标和编号。其中坐标(x,y)意义是x坐标代表东西方向,x正方向为东。类似的,y是北正南负且坐标都是整数有序对。编号是三位的,如有前导零则要补足,编号不超过999。 接下来输入一个正整数k。然后接下来k行对应这地图的记录,如果这个魔法师移动了,依次输入其编号,方向(N为北,S为南,W为西,E为东),步数(正整数)。如果这个魔法师没有移动,格式是编号和”stay”。

输出:

和输入格式一样,按照序号从小到大的顺序换行输出魔法师的名字,当前坐标和编号。

样例输入
5
Harry (1,1) 231
Hermione (2,2) 402
Ron (1,0) 311
Dumbledore (10,10) 000
Snape (-1,-1) 007
3
231 E 1
402 S 1
007 stay
样例输出
Dumbledore (10,10) 000
Snape (-1,-1) 007
Harry (2,1) 231
Ron (1,0) 311

Hermione (2,1) 402

偷偷的告诉你们,原题是要求多组输入的,,,,

mmp,害得我好久没A出来

代码有点乱,一道模拟题。

#include<bits/stdc++.h>using namespace std;struct magic{char name[1000];int x;int y;int num;}a[1005],b[1005];//方向(N为北,S为南,W为西,E为 东),步数(正整数)。如果这个魔法师没有移动,格式是编号和”stay”。struct cmp{bool operator()(const magic &a1,const magic &a2){return a1.num < a2.num;}};int main(){int n;while(~scanf("%d",&n)){map<int,magic>mp;for(int i=0;i<n;i++){scanf("%s (%d,%d) %d",a[i].name,&a[i].x,&a[i].y,&a[i].num);mp[a[i].num] = a[i];}int t;cin>>t;map<int,magic>::iterator key;for(int i=0;i<t;i++){int num;int flag=0;string s;int change;cin>>num>>s;if(s.size() == 1){cin>>change;flag = 1;}if(flag == 1){key = mp.find(num);if(key != mp.end()){if(s[0] == 'N')key->second.y += change;else if(s[0] == 'S')key->second.y -= change;else if(s[0] == 'E')key->second.x += change;else if(s[0] == 'W')key->second.x -= change;}}}map<int,magic>::iterator it;int cnt=0;for(it = mp.begin();it!=mp.end();it++){strcpy(b[cnt].name,it->second.name);b[cnt].x = it->second.x;b[cnt].y = it->second.y;b[cnt].num = it->second.num;cnt++;}sort(b,b+n,cmp());for(int i=0;i<n;i++)printf("%s (%d,%d) %03d\n",b[i].name,b[i].x,b[i].y,b[i].num);}return 0;}