平面上有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 <algorithm>
#include <string.h>
#include <vector>
using namespace std;
int input[100000];
struct Node
{
int val;
bool left;
Node(int v, int l)
{
val = v;
left = l;
}
};
bool compare(const Node &a, const Node &b)
{
if (a.val < b.val)
{
return true;
}
else if (a.val == b.val)
{
return a.left;
}
return false;
}
int fun(vector<Node> &input)
{
sort(input.begin(), input.end(), compare);
int len = input.size();
int num = len / 2;
int result = 0;
for (int i = 0; i < len; i++)
{
if (input[i].left)
{
num--;
}
else
{
result += num;
}
}
return result;
}
int main()
{
vector<Node> input;
int n;
cin >> n;
int a, b;
for (int i = 0; i < n; i++)
{
cin >> a >> b;
input.push_back(Node(a-b, true));
input.push_back(Node(a+b, false));
}
cout << fun(input) << endl;
return 0;
}