001: 冷血格斗场 (有重复second时的查找方法)

001:冷血格斗场
http://cxsjsxmooc.openjudge.cn/2020t1sprint13/001/

描述

为了迎接08年的奥运会,让大家更加了解各种格斗运动,facer新开了一家冷血格斗场。格斗场实行会员制,但是新来的会员不需要交入会费,而只要同一名老会员打一场表演赛,证明自己的实力。

我们假设格斗的实力可以用一个正整数表示,成为实力值,两人的实力值可以相同。另外,每个人都有一个唯一的id,也是一个正整数。为了使得比赛更好看,每一个新队员都会选择与他实力最为接近的人比赛,即比赛双方的实力值之差的绝对值越小越好,如果有多个人的实力值与他差别相同,则他会选择id最小的那个。

不幸的是,Facer一不小心把比赛记录弄丢了,但是他还保留着会员的注册记录。现在请你帮facer恢复比赛纪录,按照时间顺序依次输出每场比赛双方的id。
输入

第一行一个数n(0 < n <=100000),表示格斗场新来的会员数(不包括facer)。以后n行每一行两个数,按照入会的时间给出会员的id和实力值。一开始,facer就算是会员,id为1,实力值1000000000。

输出
N行,每行两个数,为每场比赛双方的id,新手的id写在前面。

样例输入
3
2 3
3 1
4 2

样例输出
2 1
3 2
4 2

#include <iostream>
#include <cstdio>    
#include <map>  
using namespace std; 

typedef multimap<long long, long long> MP;
MP fighters;

//选择强一点的对手时,需要向后在同等实力的对手里选择最小的id选手
long long back(MP::iterator p, int i) {
   
   
	MP::iterator minp = p;
	long long force = minp->first;
	long long min_id = minp->second;
	for (; p->first == force && p != fighters.end(); ++p) {
   
   
		if (p->second < min_id) {
   
   
			minp = p;
			min_id = p->second;
		}
	}
	return min_id;
}
//选择差一点的对手时,需要向前在同等实力的对手里选择最小的id选手
long long front(MP::iterator p, int i) {
   
   
	--p;
	MP::iterator minp = p;
	long long force = minp->first;
	long long min_id = minp->second
在 C++ 代码中,条件判断 `member.zhanli-di->first > gao->first-member.zhanli` 是一个用于比较两个差值的逻辑,通常用于在有序数据结构中选择更接近目标值的元素。该判断语句常见于类似“冷血格斗场”这样的编程题中,用于找出与当前值最接近的键值对,并根据条件输出相应的 ID 和匹配值[^2]。 ### 条件判断逻辑解析 该条件判断语句 `member.zhanli-di->first > gao->first-member.zhanli` 的作用是: - `di->first` 表示小于等于当前值的键; - `gao->first` 表示大于等于当前值的键; - `member.zhanli` 是当前输入的值; - 条件判断 `member.zhanli - di->first > gao->first - member.zhanli` 用于比较当前值与两个相邻键的距离。 若当前值与 `gao->first` 的距离更近,则选择 `gao->second`;否则选择 `di->second`。 ### 输出逻辑说明 当该条件成立,即 `member.zhanli - di->first > gao->first - member.zhanli` 为真,则输出当前 ID 和 `gao->second`;否则输出当前 ID 和 `di->second`。 例如: ```cpp if (value - jt->first < it->first - value) printf("%d %d\n", id, jt->second); else if (value - jt->first > it->first - value) printf("%d %d\n", id, it->second); else { if (jt->second < it->second) printf("%d %d\n", id, jt->second); else printf("%d %d\n", id, it->second); } ``` 上述代码片段展示了当两个键与目标值的距离相等,进一步比较它们的 ID 值以决定输出结果[^2]。 ### 相关问题 - 如何在 C++ 中实现类似“冷血格斗场”的匹配逻辑? - C++ 中 `map` 容器的 `lower_bound` 方法查找中起到什么作用? - 如何在 C++ 中比较两个差值并根据结果输出对应值? - 当两个差值相等,如何根据 ID 值选择输出内容? - C++ 中的条件判断如何影响最终输出结果?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值