hdu4585 STL水题

本文介绍了一道关于少林寺成立与后续成员加入时的PK规则模拟题。通过使用C++ STL中的set和map数据结构实现了快速查找与记录功能,确保了每个新成员能与现有成员中攻击力差值最小者进行PK。文章提供了完整的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:
      成立少林寺,刚开始有一个大师,id是1,攻击力是10E,现在陆续来人,每个人有自己的id,和自己的攻击力,但是每一个新来的要和之前的和尚pk,他必须选择和他攻击力差值最小的那个,如果有两个差值一样的话选择攻击力比他小的那个,输出pk组合..


思路:

     一开始还以为线段树呢,哎! 水题,我用的set找最接近的,map哈希他们的id了,其实直接一个map就行了,自己的STL用的不是很熟,所以开了两个set一个map才AC,总之这个是水题,不多解释..


#include<stdio.h>
#include<set>
#include<map>

using namespace std;
map<int ,int>hash_id;
set<int>st1 ,st2;

int abss(int x)
{
   return x > 0 ? x : -x;
}

int main ()
{
   int n ,i ,a, b;
   while(~scanf("%d" ,&n) && n)
   {
      hash_id.clear();
      st1.clear();
      st2.clear();
      hash_id[1000000000] = 1;
      st1.insert(1000000000);
      st2.insert(-1000000000);
      st2.insert(1);
      for(i = 1 ;i <= n ;i ++)
      {
         scanf("%d %d" ,&a ,&b);
         int aa = *st1.lower_bound(b);
         int bb = *st2.lower_bound(-b) * -1;
         if(bb < 0)
         printf("%d %d\n" ,a ,hash_id[aa]);
         else
         {
            if(abss(b - bb) <= abss(b - aa))
            printf("%d %d\n" ,a ,hash_id[bb]);
            else
            printf("%d %d\n" ,a ,hash_id[aa]);
         }
         st1.insert(b);
         st2.insert(-b);
         hash_id[b] = a;
      }
   }
   return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值