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