圓的異或並

2022-05-16 10:44:55 字數 1309 閱讀 9431

在平面直角座標系中給定\(n\)個圓。已知這些圓兩兩沒有交點,即兩圓的關係只存在相離和包含。求這些圓的異或面

積並。異或面積並為:當一片區域在奇數個圓內則計算其面積,當一片區域在偶數個圓內則不考慮。

這個很簡單

因為圓兩兩不相交,所以其相對位置不變,所以我們將其拆為兩個半圓弧,當我們碰到左端點的時候,就加入這兩個圓弧,碰到右端點的時候,就將他們刪去。然後我們從左到右掃瞄,找出當前這個圓的前驅,若他為上圓弧,則當前圓為其兒子,否則為其兄弟。這樣我們就將圓變為了乙個樹形圖,其中深度為奇數的貢獻為正,否則為負。

**如下:

如果set過載小於號的時候,不定義完全,會wa。我就錯了幾遍

t一定要為當前的x,不然會wa。

#include #include #include #include #include #include #include #define inf 2139062143

#define max 0x7ffffffffffffff

#define del(a,b) memset(a,b,sizeof(a))

#define rint register int

using namespace std;

typedef long long ll;

templateinline void read(t&x)

while(isdigit(c))x*=k;

}const int maxn=200000+5;

double t;

struct cir

double h(int k)

}c[maxn];

struct pic

}p[maxn<<1];

bool operator < (const pic& a,const pic& b)

sort(p+1,p+1+2*n,cmp);

set:: iterator it;

ll ans=0;

int deg;

for(int i=1;i<=2*n;i++)

if(deg&1) ans+=ll(c[p[i].num].r*c[p[i].num].r);

else ans-=ll(c[p[i].num].r*c[p[i].num].r);

s.insert(pic(p[i].num,1,deg));

s.insert(pic(p[i].num,-1,deg));

} else

} printf("%lld",ans);

return 0;

}

JLOI2016 圓的異或並

平面上給定若干互不相交的圓 僅有包含和相離兩種關係 求圓的異或面積 覆蓋奇數次的區域貢獻答案 除以 pi n leq 2 times 10 5,x i y i leq 10 8 掃瞄線從左往右掃。由於圓和圓之間不相交,與掃瞄線交點位置關係不變 上半圓看成左括號,下半圓看成右括號,將會一直滿足括號序列...

洛谷 P3268 JLOI2016 圓的異或並

在平面上有兩兩不相交的 n 個圓,即其關係只有相離和包含。求這些圓的異或面積並。異或面積並為 當一片區域被奇數個圓包含則計算其面積,否則不計算。輸出所有圓的異或面積並除以 pi 的結果。n le 200000 前置知識 掃瞄線,set。可以發現,由於圓是不相交的,那麼這種包含關係可以看作是一棵森林 ...

BZOJ4561 JLoi2016 圓的異或並

題目大意 給你一堆圓,只存在相離和包含的關係,求他們的異或面積並 如果考試的時候捲麵像我這麼標註,我怎麼能看錯題呢?用乙個掃瞄線,從左到右掃一遍,因為只有這兩種關係,所以掃瞄線上的這些圓相對位置是固定的 我們可以把每個圓想象成兩個括號,括號之間不會相交,每當掃瞄線掃到乙個新的圓時,相當於在某處新增一...