HDU4585 Shaolin

HDU4585 Shaolin

题意

少林寺以武僧闻名,每年都有很多年轻人去少林寺出家。少林大师对一个年轻人的评价主要是看他对佛经的理解能力,但也要考虑他的打斗技巧。当一个年轻人通过了所有的测试并被宣布为少林新和尚时,将会有一场战斗,作为欢迎派对的一部分。每个和尚都有一个唯一的身份证和一个唯一的战斗等级,都是整数。新和尚必须与战斗等级最接近他的老和尚战斗。如果有两个老和尚满足这一条件,新和尚将采取一个谁的战斗等级低于他的。师傅是少林第一和尚,身份证是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");
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值