NOI 3.9 STL 3344:冷血格斗场
题目来源:http://noi.openjudge.cn/ch0309/3344/
3344:冷血格斗场
总时间限制: 1000ms 内存限制: 65536kB
描述
为了迎接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
-----------------------------------------------------
思路
如果每次读入一条记录后线性查找的话,复杂度为O(n^2)会超时。采用二分插入的方式复杂度可以降低为O(nlogn). 或者直接利用map实现:将“实力值”作为key, “id”作为value.
map的lower_bound(T mykey)方法返回第一个>=mykey的iterator.
-----------------------------------------------------
代码
#include<iostream>
#include<fstream>
#include<map>
#include<stdio.h>
using namespace std;const int NMAX = 100005;int main()
{
#ifndef ONLINE_JUDGEifstream fin ("0309_3344.txt");int n,i,id,a,ido,ao,idx,ax;fin >> n;map<int,int> m; // key: 实力; value: idm[1000000000] = 1;map<int,int>::iterator it;for (i=1; i<=n; i++){fin >> id >> a;it = m.lower_bound(a); // m中第一个key>=a的iterator, 如果没有则返回m.end()if (it==m.end()) // a是m中最大的key{it--;cout << id << " " << it->second << endl;m[a] = id;}else if (it->first==a) // m的keyset已经有a{cout << id << " " << it->second << endl;if (id < it->second){m[a] = id;}}else // m的keyset中不存在a且存在比a大的数{if (it==m.begin()) // 比a还大的key是keyset中的最小值{cout << id << " " << it->second << endl;}else{ao = it->first;ido = it->second;ax = (--it)->first;idx = it->second;if (abs(ao-a) < abs(ax-a)){cout << id << " " << ido << endl;}else if (abs(ao-a) > abs(ax-a)){cout << id << " " << idx << endl;}else{if (ido < idx){cout << id << " " << ido << endl;}else{cout << id << " " << idx << endl;}}}m[a] = id;}}fin.close();
#endif
#ifdef ONLINE_JUDGEint n,i,id,a,ido,ao,idx,ax;scanf("%d",&n);map<int,int> m; // key: 实力; value: idm[1000000000] = 1;map<int,int>::iterator it;for (i=1; i<=n; i++){scanf("%d%d", &id, &a);it = m.lower_bound(a); // m中第一个key>=a的iterator, 如果没有则返回m.end()if (it==m.end()) // a是m中最大的key{it--;printf("%d %d\n", id, it->second);m[a] = id;}else if (it->first==a) // m的keyset已经有a{printf("%d %d\n", id, it->second);if (id < it->second){m[a] = id;}}else // m的keyset中不存在a且存在比a大的数{if (it==m.begin()) // 比a还大的key是keyset中的最小值{printf("%d %d\n", id, it->second);}else{ao = it->first;ido = it->second;ax = (--it)->first;idx = it->second;if (abs(ao-a) < abs(ax-a)){printf("%d %d\n", id, ido);}else if (abs(ao-a) > abs(ax-a)){printf("%d %d\n", id, idx);}else{if (ido < idx){printf("%d %d\n", id, ido);}else{printf("%d %d\n", id, idx);}}}m[a] = id;}}
#endif
}
NOI 3.9 STL 3344:冷血格斗场相关推荐
- NOI-OJ 3.9 ID:3344 冷血格斗场
NOI-OJ 3.9 ID:3344 冷血格斗场 总时间限制: 1000ms 内存限制: 65536kB 描述 为了迎接08年的奥运会,让大家更加了解各种格斗运动,facer新开了一家冷血格斗场.格斗 ...
- NOI 3343 NOI3344热血和冷血格斗场
注意先做的热血格斗场,冷血的思路相同. 题目来源 (OPENJUDGE)NOI3343:热血格斗场 http://noi.openjudge.cn/ch0309/3343/ 总时间限制: 1000m ...
- openjudge 3344 冷血格斗场
描述 为了迎接08年的奥运会,让大家更加了解各种格斗运动,facer新开了一家冷血格斗场.格斗场实行会员制,但是新来的会员不需要交入会费,而只要同一名老会员打一场表演赛,证明自己的实力. 我们假设格斗 ...
- 【STL MAP】冷血格斗场
冷血格斗场 总时间限制: 1000ms 内存限制: 65536kB 描述 为了迎接08年的奥运会,让大家更加了解各种格斗运动,facer新开了一家冷血格斗场.格斗场实行会员制,但是新来的会员不需要交入 ...
- OpenJudge-NOI/3.9数据结构之C++STL-3344:冷血格斗场
3344:冷血格斗场 总时间限制:1000ms 内存限制:65536kB 描述 为了迎接08年的奥运会,让大家更加了解各种格斗运动,facer新开了一家冷血格斗场.格斗场实行会员制,但是新来的会员不需 ...
- 冰火两重天版格斗场(热血格斗场+冷血格斗场)
062:热血格斗场 总时间限制: 1000ms 内存限制: 65536kB 描述: 为了迎接 ...
- c++编程练习 043:冷血格斗场
北大程序设计与算法(三)测验题汇总(2020春季) 描述 为了迎接08年的奥运会,让大家更加了解各种格斗运动,facer新开了一家冷血格斗场.格斗场实行会员制,但是新来的会员不需要交入会费,而只要同一 ...
- 001: 冷血格斗场 (有重复second时的查找方法)
001:冷血格斗场 http://cxsjsxmooc.openjudge.cn/2020t1sprint13/001/ 描述 为了迎接08年的奥运会,让大家更加了解各种格斗运动,facer新开了一家 ...
- openjudge3344 冷血格斗场 解题报告
总时间限制: 1000ms 内存限制: 65536kB 描述 为了迎接08年的奥运会,让大家更加了解各种格斗运动,facer新开了一家冷血格斗场.格斗场实行会员制,但是新来的会员不需要交入会费,而只要 ...
最新文章
- 腾讯天衍实验室联合微众银行研发医疗联邦学习 AI利器让脑卒中预测准确率达80%
- SFTP命令基本使用
- vs2008中js的语法提示及修正功能(downmoonn)
- 本周ASP.NET英文技术文章推荐[03/11 - 03/17]
- 关于MySQL事务和存储引擎10个FAQ(Frequently asked questions
- Mp4v2封装H264+AAC为MP4
- 这是我在网上安的第一个窝!
- RedHat宣布支持Azure、.Net Core 2.0和SQL Server 2017
- 1,日志组件XLog
- vim 执行shell命令技巧
- python操作库_python操作数据库
- 算法设计 分析篇(摊销分析)
- eclipse 替换注释
- (转) 很牛的求职经历
- photoshop实现图片更换背景
- 泡泡玛特动作频频,是“多点开花”还是“雷声大雨点小”?
- Linux命令整理(二)
- 公众号开发素材管理效果演示-微信开发素材管理1
- PMP 管理学6大定律之五(布鲁克斯定律)
- java 第六次实验_操作系统第六次实验报告——使用信号量解决哲学家进餐问题...