51NOD 1278 相离的圆(二分 + 排序 好题)
平面上有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 相离的圆(二分 + 排序 好题)相关推荐
- 51nod 1278 相离的圆 二分+排序
1278 相离的圆 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 平面上有N个圆,他们的圆心都在X轴上,给出所有圆的圆心和半径,求有多少对圆是相离的. 例如:4个 ...
- [51Nod](1278)相离的圆 ---- 二分查找
平面上有N个圆,他们的圆心都在X轴上,给出所有圆的圆心和半径,求有多少对圆是相离的. 例如:4个圆分别位于1, 2, 3, 4的位置,半径分别为1, 1, 2, 1,那么{1, 2}, {1, 3} ...
- 51nod 1278 相离的圆 (排序)
平面上有N个圆,他们的圆心都在X轴上,给出所有圆的圆心和半径,求有多少对圆是相离的. 例如:4个圆分别位于1, 2, 3, 4的位置,半径分别为1, 1, 2, 1,那么{1, 2}, {1, 3} ...
- 51nod 1278 相离的圆
基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 平面上有N个圆,他们的圆心都在X轴上,给出所有圆的圆心和半径,求有多少对圆是相离的. 例如:4个圆分别位于1, 2, ...
- 51Nod 1278 相离的圆 c/c++题解
题目描述 平面上有N个圆,他们的圆心都在X轴上,给出所有圆的圆心和半径,求有多少对圆是相离的. 例如:4个圆分别位于1, 2, 3, 4的位置,半径分别为1, 1, 2, 1,那么{1, 2}, {1 ...
- 51Nod 1278 相离的圆(好题)
题目链接 平面上有N个圆,他们的圆心都在X轴上,给出所有圆的圆心和半径,求有多少对圆是相离的. 例如:4个圆分别位于1, 2, 3, 4的位置,半径分别为1, 1, 2, 1,那么{1, 2}, {1 ...
- 【51nod】---1278 相离的圆(二分排序)
题目链接:题目 1278 相离的圆 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 平面上有N个圆,他们的圆心都在X轴上,给出所有圆的圆心和半径,求有多 ...
- 1278 相离的圆(任务调度,贪心)
平面上有N个圆,他们的圆心都在X轴上,给出所有圆的圆心和半径,求有多少对圆是相离的. 例如:4个圆分别位于1, 2, 3, 4的位置,半径分别为1, 1, 2, 1,那么{1, 2}, {1, 3} ...
- 51nod-1278 相离的圆
1278 相离的圆 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 平面上有N个圆,他们的圆心都在X轴上,给出所有圆的圆心和半径,求有多少对圆是相离 ...
最新文章
- python 相关性检验_在Python中计算Pearson相关性和重要性
- AppleWatch开发-AlertController
- java 二维数组_Java中二维数组和异常的内容及应用
- MyBatis 源码解读-带着问题去看源码
- 关于python进行批量数据备份及部署
- 幻像类型提高了编译时的安全性
- 线程高级篇-Lock锁和Condition条件
- 亚特兰大峰会精彩看点:软件吞噬世界,OpenStack是变革核心
- MiniDao持久层 Vs Mybatis
- jpa怎么传参到in中_Java中如何处理开关状态的属性字段?
- python--迭代器与生成器
- 物流配送软件测试,物流配送最优路径规划
- vue src动态加载请求获取的图片
- 傅里叶光学随机散斑原理 matlab仿真实现随机散斑
- web项目的中英文切换功
- win10隐藏网络计算机,连接隐藏网络,教你win10系统电脑连接隐藏网络的方法
- RMAN 下CROSSCHECK命令 详解
- linux lsiutil raid创建,使用Lsiutil管理Dell SAS 6i/R
- 图表——SM2密钥协商与ECMQV对比
- idea软件调整字体大小和行间距
热门文章
- 该内存不能written
- 最小生成树 算法思想及模板代码
- python数据预测模型算法_Python机器学习 预测分析核心算法
- 中望CAD的lisp编辑器_中望CAD 2020中文版
- 【mysql】mysql 中 text,longtext,mediumtext 字段类型的意思, 以及区别
- 激荡的2020过后,物流江湖下个十年谁主沉浮?
- 西门子博途V15.0安装更新包UPD4时遇到版本不一致的提示问题及处理对策
- 上高职业技术学校计算机专科,上高县职业技术学校
- MISO和MOSI是什么意思
- matlab 指定坐标轴,matlab设置坐标轴范围