Shaolin HDU - 4585(map模板题)
題意:
少林寺有n+1個和尚,他們都有一個獨有的編號和戰斗力值,當一個年輕人通過所有考試并被宣布為少林的新僧人時,將會有一場戰斗,作為歡迎的一部分。新和尚必須與一位戰斗等級最接近他的戰斗等級的老和尚戰斗。如果有兩個老僧人滿足這個條件,新僧侶將采取戰斗等級低于他的僧侶與他對打。現在保證輸入是按照編號順序升序輸入的,要求按順序輸出每一組戰斗的雙方編號,先輸出新和尚的后輸出老和尚的。(第一個和尚編號是1,戰斗力是1000000000)
題目:
Shaolin temple is very famous for its Kongfu monks.A lot of young men go to Shaolin temple every year, trying to be a monk there. The master of Shaolin evaluates a young man mainly by his talent on understanding the Buddism scripture, but fighting skill is also taken into account.
 When a young man passes all the tests and is declared a new monk of Shaolin, there will be a fight , as a part of the welcome party. Every monk has an unique id and a unique fighting grade, which are all integers. The new monk must fight with a old monk whose fighting grade is closest to his fighting grade. If there are two old monks satisfying that condition, the new monk will take the one whose fighting grade is less than his.
 The master is the first monk in Shaolin, his id is 1,and his fighting grade is 1,000,000,000.He just lost the fighting records. But he still remembers who joined Shaolin earlier, who joined later. Please recover the fighting records for him.
Input
There are several test cases.
 In each test case:
 The first line is a integer n (0 <n <=100,000),meaning the number of monks who joined Shaolin after the master did.(The master is not included).Then n lines follow. Each line has two integer k and g, meaning a monk’s id and his fighting grade.( 0<= k ,g<=5,000,000)
 The monks are listed by ascending order of jointing time.In other words, monks who joined Shaolin earlier come first.
 The input ends with n = 0.
Output
A fight can be described as two ids of the monks who make that fight. For each test case, output all fights by the ascending order of happening time. Each fight in a line. For each fight, print the new monk’s id first ,then the old monk’s id.
Sample Input
3
 2 1
 3 3
 4 2
 0
Sample Output
2 1
 3 2
 4 2
分析:
這個題充分體現出了map的優勢,因為map存儲的時候是按照關鍵字升序存儲的,所以如果按照戰斗力值作為關鍵字建立map的話,找到此戰力值的前驅和后繼就是可能要與新和尚對打的老和尚了
 map的專項知識點看我的另一篇博客:https://blog.csdn.net/zeng_jun_yv/article/details/104704897
AC代碼:
#include<bits/stdc++.h> using namespace std; map<int,int>a; int n,x,y; int main() {while(~scanf("%d",&n)&&n){a.clear();a[1000000000]=1;for(int i=1; i<=n; i++){cin>>x>>y;a[y]=x;map<int,int>::iterator it=a.find(y);if(it==a.begin())printf("%d %d\n",x,(++it)->second);else if(it==a.end())printf("%d %d\n",x,(--it)->second);else if((abs((++it)->first)-(--it)->first)<abs((--it)->first-(++it)->first))printf("%d %d\n",x,(++it)->second);elseprintf("%d %d\n",x,(--it)->second);}} }總結
以上是生活随笔為你收集整理的Shaolin HDU - 4585(map模板题)的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: map的专项知识点总结
 - 下一篇: LOL最新电竞女神排行 波涛汹涌让宅男大