Bzoj4561 JLoi2016 圓的異或並

2022-05-13 12:41:10 字數 1532 閱讀 2213

time limit: 30 sec  memory limit: 256 mb

submit: 521  solved: 224

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

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

第一行包含乙個正整數n,代表圓的個數。接下來n行,每行3個非負整數x,y,r,表示乙個圓心在(x,y),半徑為r的

圓。保證|x|,|y|,≤10^8,r>0,n<=200000

僅一行乙個整數,表示所有圓的異或面積並除以圓周率pi的結果。

2 0 0 1

0 0 2

3幾何 思路題

圓之間沒有交點是乙個很好的性質,這保證如果圓a被圓b包含,我們從某個方向掃瞄的時候一定先掃到圓b。

用set維護乙個「括號序列」,對於當前的掃瞄線x,圓與x靠下的交點記為左括號,靠上的交點記為右括號,查詢當前圓在幾層括號裡,若在奇數層就減去這個圓的面積,否則加上

1 #include2 #include3 #include4 #include5 #include6 #include

7#define ll long long

8using

namespace

std;

9const

int mxn=200010;10

intread()

13while(ch>='

0' && ch<='9')

14return x*f;15}

16struct

circ[mxn];

19struct

nodep[mxn<<1

];23

int tmp,cnt=0;24

bool

operator

< (const node &a,const node &b)

29bool cmp (const node a,const

node b)

32set

st;33

intn,f[mxn];

34 ll ans=0;35

intmain();

41 p[++cnt]=(node);42}

43 sort(p+1,p+cnt+1

,cmp);

44for(i=1;i<=cnt;i++));

49if(it==st.end())f[p[i].id]=1;50

else

54 st.insert((node));

55 st.insert((node));56}

57else

);59 st.erase((node));60}

61}62for(i=1;i<=n;i++)

65 printf("

%lld\n

",ans);

66return0;

67 }

BZOJ4561 JLoi2016 圓的異或並

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

bzoj4561 JLoi2016 圓的異或並

hdu3511 變式 層次為奇數的加,偶數的減 include include include include include using namespace std define n 200001 intline struct line e n 1 int lev n bool equal dou...

BZOJ4561 JLoi2016 圓的異或並

傳送門 把圓拆成上下兩個圓弧,因為不存在相交關係,圓弧直接的上下關係是不變的。用set維護這些圓弧,插入的時候upper bound一下,如果找到的是上圓弧,就是我外面的第乙個圓,否則我外面的第乙個圓就是這個下圓弧外面的第乙個圓。achen include include include inclu...