您的位置:首页 > 其它

HDU 4585 Shaolin

2015-02-14 21:12 295 查看
这题大意是有一个庙里,每个和尚都有自己的编号和自己的战斗力,1号战斗力最碉10^9这么大,每个入庙的和尚都要和自己战斗力相近的人战斗,如果有两个跟他战斗力相近,他选战斗力比他低的那个。现在告诉你和尚入庙顺序,问和尚的打斗顺序。

想法:这题可以用map搞一搞,用战斗力作为map的键值,然后查找与他相近的和尚。比较就可以知道他跟谁打了。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<map>
#include<algorithm>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n))
{
if(n==0) return 0;
map<int ,int > m;
m.clear();
m[1000000000] = 1;//1号战斗力最碉。
int id,fight,ans;
for(int i = 0 ; i < n ; i++)
{
scanf("%d %d",&id,&fight);
m[fight] = id;//存到map中。
map<int,int> ::iterator j;
j = m.find(fight);//找他的位置。
if(j==m.begin())//如果他是战斗力最低的,就直接跟后一个打。
ans = (++j)->second;
else//否则,找他位置的前后来比较。
{
map<int ,int > ::iterator j1,j2;
j1 = j2 = j;
if(abs((--j1)->first-fight)<=abs((++j2)->first-fight))
ans = j1->second;
else ans = j2->second;
}
printf("%d %d\n",id,ans);
}

}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm stl map