首页 > 代码库 > 冷血格斗场
冷血格斗场
题意:
http://bjutacm.openjudge.cn/lianxi/s011/
思路:
使用stl中的map实现。map中保存每个会员的实力值和id组成的pair,对于每个新会员二分查找与之实力值最相近的老会员。
实力值相同的会员只需保存id最小的那个即可。
实现:
1 #include <iostream> 2 #include <cstdio> 3 #include <map> 4 #include <cmath> 5 using namespace std; 6 7 int n, id, d; 8 map<int, int> m; 9 10 int main() 11 { 12 m.insert(pair<int, int>(1000000000, 1)); 13 scanf("%d", &n); 14 for (int i = 0; i < n; i++) 15 { 16 scanf("%d %d", &id, &d); 17 map<int, int>::iterator it = m.lower_bound(d); 18 printf("%d ", id); 19 if (it == m.end()) 20 { 21 it--; 22 printf("%d\n", it->second); 23 } 24 else if (it == m.begin()) 25 { 26 printf("%d\n", it->second); 27 } 28 else 29 { 30 int tmp = abs(it->first - d); 31 int res = it->second; 32 it--; 33 int tmp2 = abs(it->first - d); 34 if (tmp2 < tmp || (tmp2 == tmp && it->second < res)) 35 { 36 res = it->second; 37 } 38 printf("%d\n", res); 39 } 40 if (!m.count(d) || m[d] > id) 41 { 42 m[d] = id; 43 } 44 } 45 return 0; 46 }
冷血格斗场
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。