HDU ACM 4585 Shaolin->STL中set或map的应用

题意:很多人想进少林,少林最开始只有一个和尚,每个人有一个武力值,若这个人想进少林,必须和比他先进去的人比武并且武力值最接近他的比武,如果有相同的则选择武力值比他小的,问当他进去的时候要和哪个和尚比武。

分析:使用set或map方便解决。

#include<iostream>
#include<map>
#include<algorithm>
using namespace std;

int main()
{
	int n,i,id,g;
	map<int,int>::iterator it,it1,it2;

	while(cin>>n,n)
	{
		map<int,int> m;
		m[1000000000]=1;
		for(i=1;i<=n;i++)
		{
			scanf("%d%d",&id,&g);
			it=m.lower_bound(g);
			if(it==m.begin())
				cout<<id<<" "<<it->second<<endl;
			else
			{
				it1=it;
				it2=--it;
				if(it1->first-g>=g-it2->first)  //等号是为了当两边相等时输出值低的
					cout<<id<<" "<<it2->second<<endl;
				else
					cout<<id<<" "<<it1->second<<endl;
			}
			m[g]=id;
		}
	}
	return 0;
}


你可能感兴趣的:(编程,C++,c,算法,ACM)