51 NOD 1278 相離的圓

2021-08-07 12:38:10 字數 972 閱讀 4104

1278 相離的圓

基準時間限制:1 秒 空間限制:131072 kb 分值: 10 

難度:2級演算法題

平面上有n個圓,他們的圓心都在x軸上,給出所有圓的圓心和半徑,求有多少對圓是相離的。

例如:4個圓分別位於1, 2, 3, 4的位置,半徑分別為1, 1, 2, 1,那麼, 這5對都有交點,只有是相離的。

input

第1行:乙個數n,表示圓的數量(1 <= n <= 50000)

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

output

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

4

1 12 1

3 24 1

output示例

1
解析:輸入時,找到園所在的範圍[l,r],按照、r從小到大排序,然後二分找下前面第乙個r小於cur.l,[1,第乙個r小於cur.l]必然與當前園相離

**:

#include#define n 50009

using namespace std;

struct node

t[n];

bool cmp(node a, node b)

int solve(int l, int r, int x)

while(l && t[l].r >= x) l--;

return l;

}int main()

sort(t+1, t+1+n, cmp);

int ans = 0;

for(int i = 1; i <= n; i++) ans += solve(1, i, t[i].l);

printf("%d\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中間用空格...

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中間用空格分隔,...

51Nod1278 相離的圓

平面上有n個圓,他們的圓心都在x軸上,給出所有圓的圓心和半徑,求有多少對圓是相離的。例如 4個圓分別位於1,2,3,4的位置,半徑分別為1,1,2,1,那麼,這5對都有交點,只有是相離的。注意圓心在座標軸上,之前因為沒看到這句話把題跳了。然後就可以轉化為線段,按照左端點排序,i代表線段迴圈,二分求左...