链接:https://ac.nowcoder.com/acm/contest/911/F
来源:牛客网
和51nod 1278原题。
题目描述
Y轴上有许多圆,所有圆的圆心位于Y轴,求有多少对圆是没有交集的(不包含、不相交、不相切)。
输入描述:
第1行:一个整数N,表示圆的数量(1 <= N <= 100000) 以下N行:每行2个浮点数P,R。P表示圆心的位置,R表示圆的半径(1 <= P, R, P-R, P+R <= 100000),题目保证圆与X轴的两个交点为整数点。
输出描述:
输出满足条件的圆的对数。
示例1
输入
复制
3 2 1 5 1 8 1
输出
复制
3
示例2
输入
复制
4 1.5 0.5 3.5 0.5 5.5 0.5 7.5 0.5
输出
复制
6
代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
const int maxn=100000+10;
struct Node
{
double x;
bool isq;
}a[maxn*2];
int cmp(Node a,Node b)
{
if(a.x==b.x)
{
return a.isq<b.isq;
}
return a.x<b.x;
}
int main()
{
int n;
cin>>n;
int cnt=0;
for(int i=1;i<=n;i++)
{
double x,r;
cin>>x>>r;
a[cnt].x=x-r;
a[cnt].isq=0;
cnt++;
a[cnt].x=x+r;
a[cnt].isq=1;
cnt++;
}
sort(a,a+cnt,cmp);
int num=n;
ll sum=0;
for(int i=0;i<cnt;i++)
{
if(a[i].isq==0)
num--;
else
sum+=num;
}
cout<<sum<<endl;
}