题目链接:hdu 4585 Shaolin
题目大意:在一个寺庙里有个和尚,序号为1,法力非常高,接下来会有n个和尚来到寺庙,每次有和尚来到寺庙,都会向寺庙中的和尚发起挑战,每行给出和尚的序号和法力,挑战的和尚会挑选寺庙中法力和自己最接近的,如果可以,还会挑法力比自己低的(即最近的情况有比自己高的和比自己低的),给出每个和尚做挑战和尚的序号。
解题思路:二分搜索,有set完成,每次注意特判一下是否有两个差值绝对值相等的情况。
#include <stdio.h>
#include <string.h>
#include <set>
#include <algorithm>
#include <stdlib.h>
using namespace std;
const int N = 1e5+5;
const int M = 5000005;
struct HS {
int id, power;
}s[N];
int n, v[M];
set<int> vis;
void init () {
vis.clear ();
memset(v, 0, sizeof(v));
for (int i = 0; i < n; i++) {
scanf("%d%d", &s[i].id, &s[i].power);
v[s[i].power] = s[i].id;
}
vis.insert(s[0].power);
}
int main () {
while (scanf("%d", &n) == 1 && n) {
init ();
printf("%d 1\n", s[0].id);
for (int i = 1; i < n; i++) {
int ans, up, down;
set<int>::iterator it = vis.lower_bound(s[i].power);
up = *it;
if (it != vis.begin())
it--;
down = *it;
if (abs(down - s[i].power) <= abs(up - s[i].power))
ans = down;
else
ans = up;
printf("%d %d\n", s[i].id, v[ans]);
vis.insert(s[i].power);
}
}
return 0;
}
分享到:
相关推荐
HDU二分匹配及其应用,此PPT是刘春英老师版权所有, 特此贡献给广大编程爱好者,特别是对于ACMer
HDU图论题目分类
杭电ACM课件2014版之(HDUACM2010版_13)二分匹配及其应用
hdu acm 教案 二分匹配及其应用 hdu acm 教案 二分匹配及其应用
ACM HDU题目分类,我自己总结的大概只有十来个吧
hdu题目分类
HDUACM2010版13二分匹配及其应用.ppt
其中有pku、hdu、zoj等各大oj的题目分类,pku的oj比较详细一点,按不同算法进行分类,均系从网上自行搜集的。
HDU的1250,主要是利用高精度加法,但是代码有点繁琐,效率不是很高
杭电ACMhdu1163
HDU1059的代码
hdu1001解题报告
hdu 1574 passed sorce
HDU的一题........HDU DP动态规
hdu acm 教案 搜索入门 hdu acm 教案 搜索入门
hdu2101AC代码
acm 技术大牛 课件 HDU 自学必备课件 全套齐全 (lecture_01)初识ACM (lecture_02)简单数学题 (lecture_03)递推求解 (lecture_04)动态规划...(lecture_12)二分匹配及其应用 (lecture_13)动态规划(2) 并查集
因为大三了 不弄ACM了 所以这些就删了 删之前希望可以帮到别人
搜索 dfs 解题代码 hdu1241