51Nod-1278-相离的圆
来源:互联网 发布:java 线程池封装 编辑:程序博客网 时间:2024/05/16 11:11
ACM模版
描述
题解
将圆的问题转化为线段问题,按线段左端排序后,二分查找即可。
还有一种比较巧妙的办法是,将所有的线段的起点和终点存入一个数组中,然后排序,初始化num=圆的个数(线段条数),sum=0,然后从头开始遍历,遇见起点则num–,遇到终点则sum+=num。
代码
#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int MAXN = 5e4 + 10;struct line{ int left; int right;} Line[MAXN];bool cmp(line a, line b){ return a.left < b.left;}// 查找大于v的第一个数的下标int bs(line a[], int l, int h, int v){ int m; while (l < h) { m = (l + h) >> 1; if (a[m].left <= v) { l = m + 1; } else { h = m; } } return l;}int main(int argc, const char * argv[]){ int N; cin >> N; int P, R; for (int i = 0; i < N; i++) { scanf("%d %d", &P, &R); Line[i].left = P - R; Line[i].right = P + R; } sort(Line, Line + N, cmp); int res = 0; int tag; for (int i = 0; i < N - 1; i++) { tag = bs(Line, i, N, Line[i].right); res += N - tag; } cout << res << '\n'; return 0;}
参考
《二分查找》
0 0
- 51Nod-1278-相离的圆
- 1278 相离的圆(51nod)
- 51nod 1278 相离的圆
- 51nod 1278 相离的圆
- 51nod 1278 相离的圆
- 51nod-【1278 相离的圆】
- 51nod-1278 相离的圆
- 51nod 1278 相离的圆
- 51Nod 1278 相离的圆
- 51nod 1278 相离的圆
- 51nod 1278 相离的圆
- 51nod 1278 相离的圆
- 51 NOD 1278 相离的圆
- 51nod 1278 相离的圆
- 51Nod-1278-相离的圆
- 51nod 1278 相离的圆
- 相离的圆-(2)51Nod
- 51nod 1278 相离的圆(排序+修改步长)
- linux proc maps文件分析
- POJ 1185 炮兵布阵 (动态规划)
- UVA101 HDU1612 POJ1208 The Blocks Problem
- 进程间通信方式
- Spring MVC+Maven的EL表达式问题
- 51Nod-1278-相离的圆
- www加载的问题
- java回忆录—面向过程和面向对象的比较
- 运用ffmpeg生成MP4文件
- 钓鱼比赛(平均概率公式:1 - (1-p)^ t)----百度2016研发工程师在线编程题
- Android开发技巧:用Tag区分Click事件
- struts2的 struts2-json-plugin.jar使用方法
- (OK)(OK) experiment - mptcp on Android-x86-kernel-4.4.12 (SUCCESS)
- WordPress 使用 Dashicons 字体图标