You are given n circles centered on Y-aixs. The ith circle’s center is at point (i, 0) and its radius is A[i]. Count the number of pairs of circles that have at least one common point?
标签:
You are given n circles centered on Y-aixs. The ith circle’s center is at point (i, 0) and its radius is A[i]. Count the number of pairs of circles that have at least one common point?
The input should be a list of n positive integers A, each of them should be less than or equal to 1,000,000,000 and n should be less than or equal to 100,000.
The output should be the number of pairs of circles that have at least one common point in the format of Integer.
1 2 3
3
图书馆排队问题。跟问题Number of Airplanes in the Sky差不多。将每个圆在x轴上的最左边的点与最右边的点放到vector中排序,同时标记是左边的点还是右边的点,注意如果多个点在同一个坐标,左边界的点要放在前面,然后一次遍历,遇到左边界就统计当前点在几个圆的范围内,即res += cnt,然后更新cnt,即++cnt,遇到右边界就--cnt。
1 class Solution { 2 public: 3 long long countPairs(const vector<int> &A) { 4 long long res = 0, cnt = 0; 5 vector<pair<int, int>> v; 6 for(int i = 0; i < A.size(); ++i) { 7 v.push_back({i - A[i], -1}); 8 v.push_back({i + A[i], 1}); 9 } 10 sort(v.begin(), v.end()); 11 for (auto vv : v) { 12 if (vv.second == -1) { 13 res += cnt; 14 ++cnt; 15 } else { 16 --cnt; 17 } 18 } 19 return res; 20 } 21 };
标签:
原文地址:http://www.cnblogs.com/easonliu/p/4614846.html