题目来源: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:冷血格斗场相关推荐

  1. NOI-OJ 3.9 ID:3344 冷血格斗场

    NOI-OJ 3.9 ID:3344 冷血格斗场 总时间限制: 1000ms 内存限制: 65536kB 描述 为了迎接08年的奥运会,让大家更加了解各种格斗运动,facer新开了一家冷血格斗场.格斗 ...

  2. NOI 3343 NOI3344热血和冷血格斗场

    注意先做的热血格斗场,冷血的思路相同. 题目来源 (OPENJUDGE)NOI3343:热血格斗场  http://noi.openjudge.cn/ch0309/3343/ 总时间限制: 1000m ...

  3. openjudge 3344 冷血格斗场

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

  4. 【STL MAP】冷血格斗场

    冷血格斗场 总时间限制: 1000ms 内存限制: 65536kB 描述 为了迎接08年的奥运会,让大家更加了解各种格斗运动,facer新开了一家冷血格斗场.格斗场实行会员制,但是新来的会员不需要交入 ...

  5. OpenJudge-NOI/3.9数据结构之C++STL-3344:冷血格斗场

    3344:冷血格斗场 总时间限制:1000ms 内存限制:65536kB 描述 为了迎接08年的奥运会,让大家更加了解各种格斗运动,facer新开了一家冷血格斗场.格斗场实行会员制,但是新来的会员不需 ...

  6. 冰火两重天版格斗场(热血格斗场+冷血格斗场)

    062:热血格斗场​​​​​​​ 总时间限制:         1000ms                                内存限制:         65536kB 描述: 为了迎接 ...

  7. c++编程练习 043:冷血格斗场

    北大程序设计与算法(三)测验题汇总(2020春季) 描述 为了迎接08年的奥运会,让大家更加了解各种格斗运动,facer新开了一家冷血格斗场.格斗场实行会员制,但是新来的会员不需要交入会费,而只要同一 ...

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

    001:冷血格斗场 http://cxsjsxmooc.openjudge.cn/2020t1sprint13/001/ 描述 为了迎接08年的奥运会,让大家更加了解各种格斗运动,facer新开了一家 ...

  9. openjudge3344 冷血格斗场 解题报告

    总时间限制: 1000ms 内存限制: 65536kB 描述 为了迎接08年的奥运会,让大家更加了解各种格斗运动,facer新开了一家冷血格斗场.格斗场实行会员制,但是新来的会员不需要交入会费,而只要 ...

最新文章

  1. 腾讯天衍实验室联合微众银行研发医疗联邦学习 AI利器让脑卒中预测准确率达80%
  2. SFTP命令基本使用
  3. vs2008中js的语法提示及修正功能(downmoonn)
  4. 本周ASP.NET英文技术文章推荐[03/11 - 03/17]
  5. 关于MySQL事务和存储引擎10个FAQ(Frequently asked questions
  6. Mp4v2封装H264+AAC为MP4
  7. 这是我在网上安的第一个窝!
  8. RedHat宣布支持Azure、.Net Core 2.0和SQL Server 2017
  9. 1,日志组件XLog
  10. vim 执行shell命令技巧
  11. python操作库_python操作数据库
  12. 算法设计 分析篇(摊销分析)
  13. eclipse 替换注释
  14. (转) 很牛的求职经历
  15. photoshop实现图片更换背景
  16. 泡泡玛特动作频频,是“多点开花”还是“雷声大雨点小”?
  17. Linux命令整理(二)
  18. 公众号开发素材管理效果演示-微信开发素材管理1
  19. PMP 管理学6大定律之五(布鲁克斯定律)
  20. java 第六次实验_操作系统第六次实验报告——使用信号量解决哲学家进餐问题...

热门文章

  1. Kinect体感互动解决方案——体感炫舞互动系统
  2. RMreport的使用技巧
  3. 给网页添加网站的logo(icon图标)
  4. MES、ERP企业管理系统开发视频课程
  5. SetCapture, ReleaseCapture, GetCapture
  6. Maxthon3 助 taobao 为恶,哪个杀软能hold住?
  7. gateone服务器安装 基本使用
  8. JIRA缺陷管理工具
  9. 百度快照回档只为何?
  10. Google翻译API(B/S调用和C/S调用)