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

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

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

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

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

样例输入
3
2 1
3 3
4 2
样例输出
2 1
3 2
4 2

第一次用STL写出题,有点小开心嘿嘿。用的map。

下面是第一次写的代码,因为map可以按照key值从小到大依次排序,而题中写了,每次的实力值不同。所以用实力值做key。本来想过用序号做key的,但是吧,emmmmmm我需要的是实力的差值呀,需要给实力排序啊,所以该用实力做key。得写慢一点…经常烦低级错误。

#include <bits/stdc++.h>
using namespace std;
int n,a,b;
map<int,int>m;
map<int,int> :: iterator it;
int main(){cin>>n;while(n--){cin>>a>>b;m[1000000000] = 1;it = m.upper_bound(b);if(it==m.end()){it--;cout<<a<<" "<<it->second<<endl;}else if(it == m.begin()){cout<<a<<" "<<it->second<<endl;}else{if(abs(it->first - b)==abs((it--)->first-b))cout<<a<<" "<<(it--)->second<<endl;else if(abs(it->first - b)<abs((it--)->first-b))cout<<a<<" "<<it->second<<endl;else if(abs(it->first - b)>abs((it--)->first-b))cout<<a<<" "<<(it--)->second<<endl;}m[b] = a;}return 0 ;
}

我满心欢喜交上去,结果…WA了!呜呜呜,伤心。然后找错误,找找找,发现这里就错了!

else{if(abs(it->first - b)==abs((it--)->first-b))cout<<a<<" "<<(it--)->second<<endl;else if(abs(it->first - b)<abs((it--)->first-b))cout<<a<<" "<<it->second<<endl;else if(abs(it->first - b)>abs((it--)->first-b))cout<<a<<" "<<(it--)->second<<endl;}

emmmmmm要插一句的是,之前编译的时候出了错,因为我写了it-1,但是应该写成it- -
好了,看到错误了吧,这个it- -已经把it的值改变了,我还哈戳戳地每次输出都用it

看看第二次改好的代码吧

#include <bits/stdc++.h>
using namespace std;
int n,a,b;
map<int,int>m;
map<int,int> :: iterator it;
int main(){cin>>n;while(n--){cin>>a>>b;m[1000000000] = 1;it = m.upper_bound(b);if(it == m.end()){it--;cout<<a<<" "<<it->second<<endl;}else if(it == m.begin()){cout<<a<<" "<<it->second<<endl;}else{int t1 = abs(it->first- b);it--;int t2 = abs(it->first- b);if(t1==t2)cout<<a<<" "<<it->second<<endl;else if(t1>t2)cout<<a<<" "<<it->second<<endl;else if(t1<t2){it++;cout<<a<<" "<<it->second<<endl;}}m[b] = a;}return 0 ;
}

改好了可开心了,结果…超时!
想了一番后,我决定做个弊。看了其他大佬的AC代码后,我发现给map插入值用的方法不一样。

给map插入值有四种方法。我偷懒,用的最简单的一种m[b]=a;就把它看成数组来用。但是大佬用的是m.insert(pair<int,int>(b,a)),我试着改了,然后通过了。m.insert(pair<int,int>(a,b))还可以写成m.insert(make_pair(b,a)),我写最后的插入时也用的这个,没有超时

那最后的代码就是:

#include <bits/stdc++.h>
using namespace std;
int n,a,b;
map<int,int>m;
map<int,int> :: iterator it;
int main(){cin>>n;while(n--){cin>>a>>b;m.insert(pair<int,int>(1000000000,1));it = m.upper_bound(b);if(it == m.end()){it--;cout<<a<<" "<<it->second<<endl;}else if(it == m.begin()){cout<<a<<" "<<it->second<<endl;}else{int t1 = abs(it->first- b);it--;int t2 = abs(it->first- b);if(t1==t2)cout<<a<<" "<<it->second<<endl;else if(t1>t2)cout<<a<<" "<<it->second<<endl;else if(t1<t2){it++;cout<<a<<" "<<it->second<<endl;}}m.insert(make_pair(b,a));}return 0 ;
}

3343:热血格斗场相关推荐

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

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

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

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

  3. 热血格斗传说起名字的学问!

    2019独角兽企业重金招聘Python工程师标准>>> 貌似FC上的热血格斗传说,这个应该不需要我多解释和介绍了,今天我就谈谈里面起名字的学问,以前用卡带玩的时候研究的,暂时百度过没 ...

  4. openjudge 3344 冷血格斗场

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

  5. NOI 3.9 STL 3344:冷血格斗场

    题目来源:http://noi.openjudge.cn/ch0309/3344/ 3344:冷血格斗场 总时间限制: 1000ms    内存限制: 65536kB 描述 为了迎接08年的奥运会,让 ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. python3 list 列表 方法说明
  2. Navicatfor mysql怎么设置唯一约束
  3. vue组件系列2、拖放上传
  4. 如何实现文字翻译,这个技巧你需要掌握
  5. linux 指令引用变量,Linux之变量引用与命令替换
  6. [导入]基于Web的B/S结构实时监控系统[转]
  7. [人生百态]爱的样子
  8. 深度学习检测眼睛疾病
  9. WEB端后台常用Axure元件库及框架模版
  10. Android APP开发入门教程
  11. ov5640帧率配置_OV5640摄像头的数据处理配置流程(一)
  12. Java深圳工作面试经历(真实经历)!!!
  13. 【03】手把手教你构建垃圾分类系统-基于tensorflow2.3
  14. java做微信支付notify_url异步通知服务端的写法
  15. Java面试宝典2013版
  16. AprilTag视觉定位系统
  17. 关于放大器失真的原因你了解多少呢?
  18. pandas - 特别篇(关于读取DataFrame数据显示不完全的解决办法)
  19. 【攻略】如何用云服务器实现云搬砖
  20. PCA和单位球面上二次型的极大化

热门文章

  1. 电脑蓝牙耳机连接不稳定_win10系统蓝牙耳机连接中断的解决方法
  2. Android 常见的抓log方法总结
  3. 启动优化 · 基础论 · 浅析Android启动优化
  4. 一文搞懂 | Linux 同步管理(上)
  5. 人机共生?马斯克的疯狂“实验”还很遥远
  6. iOS开发之如何保证控件位置不变,增加触控范围(即frame和bounds的区别)
  7. 阿里巴巴服务器泡进“水里”液冷服务器技术
  8. 字符串的交叉合并c语言,C语言 两字符串的合并
  9. html表单界面设计,ui界面表单设计的三个方面
  10. SQL2000无法安装,提示挂起