题意
少林寺以武僧闻名,每年都有很多年轻人去少林寺出家。少林大师对一个年轻人的评价主要是看他对佛经的理解能力,但也要考虑他的打斗技巧。当一个年轻人通过了所有的测试并被宣布为少林新和尚时,将会有一场战斗,作为欢迎派对的一部分。每个和尚都有一个唯一的身份证和一个唯一的战斗等级,都是整数。新和尚必须与战斗等级最接近他的老和尚战斗。如果有两个老和尚满足这一条件,新和尚将采取一个谁的战斗等级低于他的。师傅是少林第一和尚,身份证是1,武功等级是1亿,刚刚丢失了武功记录。但他仍然记得谁先加入少林,谁后加入少林。请帮他找回打斗记录。
思路
set的二分查找(本来只想写个水题,看一下我的码代码速度,结果wa了好几发,难受死了)
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
while(~scanf("%d",&n)){
if(n==0) break;
set<pair<int ,int> > q;
q.insert({1000000000,1});
for(int i=1;i<=n;i++){
int k,g;scanf("%d%d",&k,&g);
pair<int,int> tmp={g,k};
auto x=q.upper_bound(tmp);
if(x==q.begin()){
printf("%d %d\n",k,x->second);
}
else {
auto y=x;
int val1=x->first-g;
y--;
int val2=g-y->first;
if(val1<val2){
printf("%d %d\n",k,x->second);
}
else {
printf("%d %d\n",k,y->second);
}
}
q.insert({g,k});
}
}
// system("pause");
}
版权声明:本文为qq_41750091原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。