码迷,mamicode.com
首页 > 其他好文 > 详细

[HDU 4585] Shaolin (map应用)

时间:2014-11-23 12:59:06      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   sp   for   on   

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4585

题目大意:不停的插入数字,问你跟他相距近的ID号。如果有两个距离相近的话选择小的那个。

 

用map,先用upper_bound找到大的,然后迭代器减1,就能够找到相近的两个。

然后。。用链表不知道为什么有问题。。。。

而且迭代器it,如果减1的话,不能写 it2 = --it1; 这样会wa

但是。。it2 = it1; it2--;这样就AC了,在这里记录一下,今后注意。

 1 //#pragma comment( linker, "/STACK:1024000000,1024000000")
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <queue>
 5 #include <algorithm>
 6 #include <cmath>
 7 #include <map>
 8 #include <iterator>
 9 using namespace std;
10 
11 typedef map<int,int>::iterator pt;
12 
13 map<int,int> mp;
14 int n;
15 
16 int main(){
17     while(scanf("%d",&n),n){
18         int k,g;
19         mp.clear();
20         mp.insert(make_pair(1000000000,1));
21         for(int i=0;i<n;i++){
22             scanf("%d%d",&k,&g);
23             pt it2 = mp.upper_bound(g);
24 
25             if( it2==mp.begin() ){
26                 printf("%d %d\n",k,it2->second);
27                 mp.insert(make_pair(g,k));
28                 continue;
29             }
30 
31             pt it1 = it2;
32             it1--;
33             if( abs(g-it1->first)<=abs(g-it2->first) ) {
34                 printf("%d %d\n",k,it1->second);
35             } else  {
36                 printf("%d %d\n",k,it2->second);
37             }
38             mp.insert(make_pair(g,k));
39         }
40     }
41     return 0;
42 }

 

[HDU 4585] Shaolin (map应用)

标签:style   blog   http   io   ar   color   sp   for   on   

原文地址:http://www.cnblogs.com/llkpersonal/p/4116364.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!