平面上有N个圆,他们的圆心都在X轴上,给出所有圆的圆心和半径,求有多少对圆是相离的。

例如:4个圆分别位于1, 2, 3, 4的位置,半径分别为1, 1, 2, 1,那么{1, 2}, {1, 3} {2, 3} {2, 4} {3, 4}这5对都有交点,只有{1, 4}是相离的。

收起

输入

第1行:一个数N,表示圆的数量(1 <= N <= 50000)
第2 - N + 1行:每行2个数P, R中间用空格分隔,P表示圆心的位置,R表示圆的半径(1 <= P, R <= 10^9)

输出

输出共有多少对相离的圆。

输入样例

4
1 1
2 1
3 2
4 1

输出样例

1

分析:

一开始想到离散化+树状数组上去了,结果发现自己写错了。

回来先想到了排序,后来自然想到了二分(虽然有学长说这题是排序+二分的原因)

我们先把圆心和半径转化为线段的起始坐标,我们知道只要一条线段的右端点比某线段左端小,则这两条线段一定相离,所以我们先对右端点排序,枚举每一个左端点i,然后二分查找<i的个数即可。

#include<bits/stdc++.h>
using namespace std;struct node
{long long l,r;
}a[50005];
long long st[50005],en[50005];
bool cmp(node x,node y)
{if(x.l==y.l)return x.r<y.r;elsereturn x.l<y.l;
}int main()
{int n;while(~scanf("%d",&n)){long long  pos,d;for(int i=1;i<=n;i++){scanf("%lld%lld",&pos,&d);a[i].l=pos-d;a[i].r=pos+d;}//sort(a+1,a+n+1,cmp);for(int i=0;i<n;i++){st[i]=a[i+1].l;en[i]=a[i+1].r;//cout<<en[i]<<endl;//cout<<a[i+1].l<<"      "<<a[i+1].r<<endl;}sort(en,en+n);long long ans=0;for(int i=0;i<n;i++){int temp=(lower_bound(en,en+n,st[i])-(en));//cout<<st[i]<<" "<<temp<<endl;ans+=temp;}printf("%lld\n",ans);}return 0;
}

51NOD 1278 相离的圆(二分 + 排序 好题)相关推荐

  1. 51nod 1278 相离的圆 二分+排序

    1278 相离的圆 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 平面上有N个圆,他们的圆心都在X轴上,给出所有圆的圆心和半径,求有多少对圆是相离的. 例如:4个 ...

  2. [51Nod](1278)相离的圆 ---- 二分查找

    平面上有N个圆,他们的圆心都在X轴上,给出所有圆的圆心和半径,求有多少对圆是相离的. 例如:4个圆分别位于1, 2, 3, 4的位置,半径分别为1, 1, 2, 1,那么{1, 2}, {1, 3} ...

  3. 51nod 1278 相离的圆 (排序)

    平面上有N个圆,他们的圆心都在X轴上,给出所有圆的圆心和半径,求有多少对圆是相离的. 例如:4个圆分别位于1, 2, 3, 4的位置,半径分别为1, 1, 2, 1,那么{1, 2}, {1, 3} ...

  4. 51nod 1278 相离的圆

    基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 平面上有N个圆,他们的圆心都在X轴上,给出所有圆的圆心和半径,求有多少对圆是相离的. 例如:4个圆分别位于1, 2, ...

  5. 51Nod 1278 相离的圆 c/c++题解

    题目描述 平面上有N个圆,他们的圆心都在X轴上,给出所有圆的圆心和半径,求有多少对圆是相离的. 例如:4个圆分别位于1, 2, 3, 4的位置,半径分别为1, 1, 2, 1,那么{1, 2}, {1 ...

  6. 51Nod 1278 相离的圆(好题)

    题目链接 平面上有N个圆,他们的圆心都在X轴上,给出所有圆的圆心和半径,求有多少对圆是相离的. 例如:4个圆分别位于1, 2, 3, 4的位置,半径分别为1, 1, 2, 1,那么{1, 2}, {1 ...

  7. 【51nod】---1278 相离的圆(二分排序)

    题目链接:题目 1278 相离的圆 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 平面上有N个圆,他们的圆心都在X轴上,给出所有圆的圆心和半径,求有多 ...

  8. 1278 相离的圆(任务调度,贪心)

    平面上有N个圆,他们的圆心都在X轴上,给出所有圆的圆心和半径,求有多少对圆是相离的. 例如:4个圆分别位于1, 2, 3, 4的位置,半径分别为1, 1, 2, 1,那么{1, 2}, {1, 3} ...

  9. 51nod-1278 相离的圆

    1278 相离的圆 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 平面上有N个圆,他们的圆心都在X轴上,给出所有圆的圆心和半径,求有多少对圆是相离 ...

最新文章

  1. python 相关性检验_在Python中计算Pearson相关性和重要性
  2. AppleWatch开发-AlertController
  3. java 二维数组_Java中二维数组和异常的内容及应用
  4. MyBatis 源码解读-带着问题去看源码
  5. 关于python进行批量数据备份及部署
  6. 幻像类型提高了编译时的安全性
  7. 线程高级篇-Lock锁和Condition条件
  8. 亚特兰大峰会精彩看点:软件吞噬世界,OpenStack是变革核心
  9. MiniDao持久层 Vs Mybatis
  10. jpa怎么传参到in中_Java中如何处理开关状态的属性字段?
  11. python--迭代器与生成器
  12. 物流配送软件测试,物流配送最优路径规划
  13. vue src动态加载请求获取的图片
  14. 傅里叶光学随机散斑原理 matlab仿真实现随机散斑
  15. web项目的中英文切换功
  16. win10隐藏网络计算机,连接隐藏网络,教你win10系统电脑连接隐藏网络的方法
  17. RMAN 下CROSSCHECK命令 详解
  18. linux lsiutil raid创建,使用Lsiutil管理Dell SAS 6i/R
  19. 图表——SM2密钥协商与ECMQV对比
  20. idea软件调整字体大小和行间距

热门文章

  1. 该内存不能written
  2. 最小生成树 算法思想及模板代码
  3. python数据预测模型算法_Python机器学习 预测分析核心算法
  4. 中望CAD的lisp编辑器_中望CAD 2020中文版
  5. 【mysql】mysql 中 text,longtext,mediumtext 字段类型的意思, 以及区别
  6. 激荡的2020过后,物流江湖下个十年谁主沉浮?
  7. 西门子博途V15.0安装更新包UPD4时遇到版本不一致的提示问题及处理对策
  8. 上高职业技术学校计算机专科,上高县职业技术学校
  9. MISO和MOSI是什么意思
  10. matlab 指定坐标轴,matlab设置坐标轴范围