标签:
题意:讲的是一群无聊的和尚在比武,当来了一个新和尚时要挑选一个战斗力与他最接近的老和尚比武,
如果有两个老和尚和尚与他的战斗力的绝对值相等,则选择战斗力比他小的。
输出这个新和尚的编号和与他比武的老和尚的编号
直接用map标记就行了,
不过还是WA了好几次,说明自己还是很差啊!
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<vector> 5 #include<set> 6 #include<algorithm> 7 #include<cmath> 8 #include<stdlib.h> 9 #include<map> 10 using namespace std; 11 #define N 100006 12 int n; 13 map<int,int>mp; 14 map<int,int>::iterator it,it2; 15 int main() 16 { 17 while(scanf("%d",&n)==1 && n) 18 { 19 mp.clear(); 20 mp[1000000000]=1; 21 for(int i=0;i<n;i++) 22 { 23 int x,y; 24 scanf("%d%d",&x,&y); 25 it=mp.lower_bound(y); 26 if(it==mp.begin())//当新的只能排在第一位时,直接输出第一个 27 { 28 printf("%d %d\n",x,it->second); 29 } 30 else 31 { 32 it2=it; 33 it--; 34 if(abs(y-it->first)>abs(y-it2->first)) 35 printf("%d %d\n",x,it2->second); 36 else 37 printf("%d %d\n",x,it->second); 38 } 39 mp[y]=x; 40 } 41 } 42 return 0; 43 }
标签:
原文地址:http://www.cnblogs.com/UniqueColor/p/4730968.html