第五届图灵杯1869

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
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))
	{
		mapmp;
		for(int i=0;i>t;
		map::iterator key;
		for(int i=0;i>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::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


你可能感兴趣的:(NEUQ,OJ)