51nod1278
来源:互联网 发布:mac怎么qq远程控制 编辑:程序博客网 时间:2024/05/17 07:02
1278 相离的圆
基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注
平面上有N个圆,他们的圆心都在X轴上,给出所有圆的圆心和半径,求有多少对圆是相离的。
例如:4个圆分别位于1, 2, 3, 4的位置,半径分别为1, 1, 2, 1,那么{1, 2}, {1, 3} {2, 3} {2, 4} {3, 4}这5对都有交点,只有{1, 4}是相离的。
Input
第1行:一个数N,表示圆的数量(1 <= N <= 50000)
第2 - N + 1行:每行2个数P, R中间用空格分隔,P表示圆心的位置,R表示圆的半径(1 <= P, R <= 10^9)
Output
输出共有多少对相离的圆。
Input示例
4
1 1
2 1
3 2
4 1
Output示例
1
排序+二分(本题没有内含的情况)
#include <iostream>#include <stdio.h>#include <algorithm>using namespace std;struct node{ int l,r; bool operator < (const node &a) const { if(l==a.l) return r<a.r; return l<a.l; }}e[56789];int bs(int l,int r,int key){ int left=l; int right=r; while(left<=right) { int mid=(left+right)/2; if(e[mid].l >= key) { right=mid-1; } else { left=mid+1; } } if(e[left].l==key) left++; return left;}int main(){ int n; int p,q; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d %d",&p,&q); e[i].l=p-q; e[i].r=p+q; } sort(e,e+n); int sum=0; for(int i=0;i<n;i++) { sum+=(n-bs(i+1,n-1,e[i].r)); } printf("%d\n",sum); return 0;}
0 0
- 51nod1278
- 51
- 51
- 51
- 51
- 51
- 51
- 51
- 51Job?51吐槽!
- 51总结
- 51计划
- 51job
- 练习51
- 51观感
- 51入门
- 51cto
- 51CTO
- 51汇编程序
- 使用BottomSheetBehavior时遇到的坑(Support Library 25)
- Poj 2976 Dropping tests【01分数规划+贪心】
- POJ 2248 Addition Chains(DFS)
- 机器学习各算法思想(极简版)
- XTU 1249 Rolling Variance
- 51nod1278
- java SimpleDateFormat和Calendar的转换
- 【Treap/非旋转Treap】BZOJ1503 [NOI2004]郁闷的出纳员
- UESTC
- cpu占用过高
- 扫雷(用C语言编写扫雷游戏)
- 字符串扩展
- 正交信号的理解
- java 开始小结