Map容器之热血格斗场
3343:热血格斗场
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
为了迎接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#include<bits/stdc++.h>
using namespace std;
map<int,int> m;
int main()
{
int n,x,y;
cin>>n;
m[] = ;
for(int i=; i<=n; i++)
{
scanf("%d %d",&x,&y);
m[y]=x;
map<int,int>::iterator iter,now,pre,nex;
iter=m.find(y);
if(iter==m.begin())
{
nex = iter;
nex++;
printf("%d %d\n",iter->second,nex->second);
}
else if(iter==m.end())
{
pre=iter;
pre--;
printf("%d %d\n",iter->second,pre->second);
}
else
{
nex=iter;
nex++;
pre=iter;
pre--;
if(iter->first - pre->first < nex->first-iter->first) printf("%d %d\n",iter->second,pre->second);
else if(iter->first-pre->first > nex->first-iter->first) printf("%d %d\n",iter->second,nex->second);
else printf("%d %d\n",iter->second,pre->second);
}
}
return ;
}其实这个题还是很简单的,首先要明白map容器的排序是根据第一个值来排序的,而后面既然要比较实力值的大小,自然要让实力作为排列的对象。
所以这个实力值就放在map的first里面,后面跟上相对应的ID值,放在second里面。输入之后,反向存入。
然后定义迭代器,iter,pre和nex。这对于后面的情况分类非常有用。情况分为三类,第一类就是新插入的数据放在faceer的前面,这样的话,
通过迭代器找到之后,它就等于该map的begin。这时候让nex指向iter,然后nex++。注意这里不要直接让iter++或者--输入,这样可能会出错。
老老实实地定义一个pre或者nex最好。后面的end同理。
对于其中的数据就很好理解了,一个if判断一下差值的大小,注意减数和被减数的放置在前后的代码里面都是一样的,这样减出来会是正数,就方便了
判断,要不然还要使用cmath,这样会拖慢程序的运行时间。
其实也可以用三目运算符,这样也可以。还有就是关于输入输出的问题,尽量能不要使用cin,cout就不要使用,这个题搞不好就会因为效率问题导致
时间超时。
Map容器之热血格斗场的更多相关文章
- HDU 2094 产生冠军 (map容器)
title: 产生冠军 杭电 2094 tags: [acm,stl] 题目链接 Problem Description 有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛. 球赛的规则 ...
- map 容器的使用
C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值. 一.map的说明 1 头文件 #include <map> ...
- 一种map容器遍历的方法
遍历算法是一种很常见而且非常重要的算法,我们用map容器的时候可能用的比较多的是查找,我今天才第一次要用到遍历.下面举个例子就知道了. map<string,string> mp; str ...
- CSU 1113 Updating a Dictionary(map容器应用)
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1113 解题报告:输入两个字符串,第一个是原来的字典,第二个是新字典,字典中的元素的格式为 ...
- B:冷血格斗场
总时间限制: 1000ms 内存限制: 65536kB描述为了迎接08年的奥运会,让大家更加了解各种格斗运动,facer新开了一家冷血格斗场.格斗场实行会员制,但是新来的会员不需要交入会费,而只要同一 ...
- map容器
map容器一般用于对字符串进行编号,主要用于建图方面,例如把城市名按数字进行编号 #include"stdio.h" #include"string.h" #i ...
- Tangled in Cables(Kruskal+map容器处理字符串)
/** 题意: 给你两个城市之间的道路(无向图),求出需要的 电缆.如果大于所提供的,就输出Not enough ... 否则输出所需要的电缆长度. 输入:N (给 ...
- stl之map容器的原理及应用
容器的数据结构同样是采用红黑树进行管理,插入的元素健位不允许重复,所使用的节点元素的比较函数,只对元素的健值进行比较,元素的各项数据可通过健值检索出来.map容器是一种关联容器,实现了SortedAs ...
- STL --> map容器
map容器 一.map简介 map是一类关联式容器.它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响.对于迭代器来说,可以修改实值,而不能修改key. 二.ma ...
随机推荐
- first-child和last-child选择器 nth-child(n)第几个元素 nth-last-child(n)倒数第几个元素
:first-child 和 :last-child 分别表示父元素中第一个 或者 最后一个 子元素设置样式,如上图
- centos7上使用locate命令-文件查找
centos7上使用locate命令 小贴士:在centOS7以上的系统中使用“locate”文件查找命令,发现该命令不可用. 检查了下,原来是centos7默认没有安装该命令,在联网状态运行“y ...
- 怎么查看这个历史最大连接session数
select * from dba_high_water_mark_statistics;
- Vue 页面加载闪现代码问题
CSS中 [v-cloak] { display: none; } HTML中 <div v-cloak> {{ message }} </div> 显示代码主要是{{}}这个 ...
- nodejs+multiparty 文件上传
通过表单提交上传文件: html代码 <form action="/uploadFile" method="post" enctype=" ...
- Map集合的实现类
Map的继承关系: Map接口的常用实现类: 1.HashMap.Hashtable(t是小写) HashMap不是线程安全的,key.value的值都可以是null. Hashtable是线程安全的 ...
- CF779C(round 402 div.2 C) Dishonest Sellers
题意: Igor found out discounts in a shop and decided to buy n items. Discounts at the store will last ...
- 【学习笔记】一:JavaScript简介
1.JavaScript简史 1)JavaScript最初的功能只是用来在客户端做简单的输入验证器,减少客户端与服务器端的数据交互(毕竟那个年代网速有限). 2)JavaScript的飞速发展及Net ...
- 第8章 应用协议 图解TCP/IP 详解
第8章 应用协议 图解TCP/IP 详解 8.1 应用层协议概要 应用层协议的定义 TCP和IP等下层协议是不依赖上层应用类型.实用性非常广的协议.而应用协议则是为了实现某种应用而设计和创造的协议. ...
- Android-Emulator使用
1.查看当前android支持的avd版本 2.创建Emulator avd: android create avd -n magicyu -t 2 -n后面接需要创建avd的名字,-t后面接需要创建 ...