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容器之热血格斗场的更多相关文章

  1. HDU 2094 产生冠军 (map容器)

    title: 产生冠军 杭电 2094 tags: [acm,stl] 题目链接 Problem Description 有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛. 球赛的规则 ...

  2. map 容器的使用

    C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值. 一.map的说明    1   头文件   #include   <map> ...

  3. 一种map容器遍历的方法

    遍历算法是一种很常见而且非常重要的算法,我们用map容器的时候可能用的比较多的是查找,我今天才第一次要用到遍历.下面举个例子就知道了. map<string,string> mp; str ...

  4. CSU 1113 Updating a Dictionary(map容器应用)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1113 解题报告:输入两个字符串,第一个是原来的字典,第二个是新字典,字典中的元素的格式为 ...

  5. B:冷血格斗场

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

  6. map容器

    map容器一般用于对字符串进行编号,主要用于建图方面,例如把城市名按数字进行编号 #include"stdio.h" #include"string.h" #i ...

  7. Tangled in Cables(Kruskal+map容器处理字符串)

    /** 题意:     给你两个城市之间的道路(无向图),求出需要的     电缆.如果大于所提供的,就输出Not enough ...     否则输出所需要的电缆长度.       输入:N (给 ...

  8. stl之map容器的原理及应用

    容器的数据结构同样是采用红黑树进行管理,插入的元素健位不允许重复,所使用的节点元素的比较函数,只对元素的健值进行比较,元素的各项数据可通过健值检索出来.map容器是一种关联容器,实现了SortedAs ...

  9. STL --> map容器

    map容器 一.map简介 map是一类关联式容器.它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响.对于迭代器来说,可以修改实值,而不能修改key. 二.ma ...

随机推荐

  1. first-child和last-child选择器 nth-child(n)第几个元素 nth-last-child(n)倒数第几个元素

    :first-child 和  :last-child 分别表示父元素中第一个 或者  最后一个 子元素设置样式,如上图

  2. centos7上使用locate命令-文件查找

    centos7上使用locate命令   小贴士:在centOS7以上的系统中使用“locate”文件查找命令,发现该命令不可用. 检查了下,原来是centos7默认没有安装该命令,在联网状态运行“y ...

  3. 怎么查看这个历史最大连接session数

    select * from dba_high_water_mark_statistics;

  4. Vue 页面加载闪现代码问题

    CSS中 [v-cloak] { display: none; } HTML中 <div v-cloak> {{ message }} </div> 显示代码主要是{{}}这个 ...

  5. nodejs+multiparty 文件上传

    通过表单提交上传文件:     html代码 <form action="/uploadFile" method="post" enctype=" ...

  6. Map集合的实现类

    Map的继承关系: Map接口的常用实现类: 1.HashMap.Hashtable(t是小写) HashMap不是线程安全的,key.value的值都可以是null. Hashtable是线程安全的 ...

  7. 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 ...

  8. 【学习笔记】一:JavaScript简介

    1.JavaScript简史 1)JavaScript最初的功能只是用来在客户端做简单的输入验证器,减少客户端与服务器端的数据交互(毕竟那个年代网速有限). 2)JavaScript的飞速发展及Net ...

  9. 第8章 应用协议 图解TCP/IP 详解

    第8章 应用协议 图解TCP/IP 详解 8.1 应用层协议概要 应用层协议的定义 TCP和IP等下层协议是不依赖上层应用类型.实用性非常广的协议.而应用协议则是为了实现某种应用而设计和创造的协议. ...

  10. Android-Emulator使用

    1.查看当前android支持的avd版本 2.创建Emulator avd: android create avd -n magicyu -t 2 -n后面接需要创建avd的名字,-t后面接需要创建 ...