51Nod 1278 相離的圓 貪心 二分

2021-09-30 19:36:38 字數 923 閱讀 1371

題目

平面上有n個圓,他們的圓心都在x軸上,給出所有圓的圓心和半徑,求有多少對圓是相離的。例如:4個圓分別位於1, 2, 3, 4的位置,半徑分別為1, 1, 2, 1,那麼, 這5對都有交點,只有是相離的。

輸入

第1行:乙個數n,表示圓的數量(1 <= n <= 50000);第2 - n + 1行:每行2個數p, r中間用空格分隔,p表示圓心的位置,r表示圓的半徑(1 <= p, r <= 10^9)

輸出

輸出共有多少對相離的圓。

樣例輸入

4

1 12 1

3 24 1

樣例輸出

1
分析

將圓看作一條在x軸上的線段,左右端點的座標為圓心座標減、加半徑。然後將線段進行排序,左端點小的排在前面,左端點相同時右端點小的排在前面 ,然後遍歷n個圓,統計與此時遍歷的圓相離的圓的個數,找到第乙個與圓i相離的圓的編號,由排序原則可知,此圓之後的圓都與圓i相離,使用二分法查詢與圓i相離的第乙個圓的編號,具體看程式。

c++程式

#include#includeusing namespace std;

const int n=50100;

typedef long long ll;

struct line

while(midif(mid!=n)

ans+=n-mid;

} printf("%lld\n",ans);

return 0;

}

51nod 1278 相離的圓

題目 平面上有n個圓,他們的圓心都在x軸上,給出所有圓的圓心和半徑,求有多少對圓是相離的。例如 4個圓分別位於1,2,3,4的位置,半徑分別為1,1,2,1,那麼,這5對都有交點,只有是相離的。input 第1行 乙個數n,表示圓的數量 1 n 50000 第2 n 1行 每行2個數p,r中間用空格...

51 NOD 1278 相離的圓

1278 相離的圓 基準時間限制 1 秒 空間限制 131072 kb 分值 10 難度 2級演算法題 平面上有n個圓,他們的圓心都在x軸上,給出所有圓的圓心和半徑,求有多少對圓是相離的。例如 4個圓分別位於1,2,3,4的位置,半徑分別為1,1,2,1,那麼,這5對都有交點,只有是相離的。inpu...

51Nod 1278 相離的圓

平面上有n個圓,他們的圓心都在x軸上,給出所有圓的圓心和半徑,求有多少對圓是相離的。例如 4個圓分別位於1,2,3,4的位置,半徑分別為1,1,2,1,那麼,這5對都有交點,只有是相離的。input 第1行 乙個數n,表示圓的數量 1 n 50000 第2 n 1行 每行2個數p,r中間用空格分隔,...