您的位置:首页 > 其它

第五届图灵杯1869

2017-12-03 22:38 363 查看

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: