BZOJ4561 JLoi2016 圓的異或並

2022-09-19 08:09:09 字數 1490 閱讀 6217

傳送門

把圓拆成上下兩個圓弧,因為不存在相交關係,圓弧直接的上下關係是不變的。

用set維護這些圓弧,插入的時候upper_bound一下,如果找到的是上圓弧,就是我外面的第乙個圓,否則我外面的第乙個圓就是這個下圓弧外面的第乙個圓。

//

achen

#include#include

#include

#include

#include

#include

#include

#include

#include

#define for(i,a,b) for(int i=(a);i<=(b);i++)

#define rep(i,a,b) for(int i=(a);i>=(b);i--)

const

int n=400007

;typedef

long

long

ll;typedef

double

db;using

namespace

std;

intn,cnt,f[n];

db x[n],y[n],r[n],now;

template

void read(t &x)

struct

node

node(

int id,int

f):id(id),f(f){}

friend

bool

operator

}q[n];

struct

bow

bow(

int id,int

f):id(id),f(f){}

};bool

operator

sets;

#define it set::iterator

//#define debug

intmain()

sort(q+1,q+cnt+1

); for(i,

1,cnt)

else f[q[i].id]=1

; s.insert(bow(q[i].id,

1)); s.insert(bow(q[i].id,-1

));

}else s.erase(bow(q[i].id,1)),s.erase(bow(q[i].id,-1

)) ;

}db ans=0

; for(i,

1,n)

ans+=r[i]*r[i]*f[i];

printf(

"%lld\n

",(ll)ans);

return0;

}/*5-153 -765 50

-51 -765 50

0 867 50

0 969 50

0 969 47

*/

view code

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 圓的異或並

time limit 30 sec memory limit 256 mb submit 521 solved 224 在平面直角座標系中給定n個圓。已知這些圓兩兩沒有交點,即兩圓的關係只存在相離和包含。求這些圓的異或面 積並。異或面積並為 當一片區域在奇數個圓內則計算其面積,當一片區域在偶數個圓內...