平面上給定若干互不相交的圓(僅有包含和相離兩種關係),求圓的異或面積(覆蓋奇數次的區域貢獻答案)除以 \(\pi\)。
\(n\leq 2\times 10^5,|x_i|,|y_i|\leq 10^8\)
掃瞄線從左往右掃。由於圓和圓之間不相交,與掃瞄線交點位置關係不變(上半圓看成左括號,下半圓看成右括號,將會一直滿足括號序列合法)。然後加入乙個圓就維護下新加進來的兩個括號。使用set
維護。複雜度 \(\mathcal o(n\log n)\)。
#include #define pb push_back
using std::vector; using std::set; using std::sort;
typedef long long ll;
typedef double db;
const int n = 200005;
const db eps = 1e-7;
int n, x[n], y[n], r[n], tag[n];
struct node1 ;
vectorv;
bool cmp(node1 a, node1 b)
int x;
ll sqr(int x)
struct node2
friend bool operator < (node2 a, node2 b)
};sets;
int main() ), v.pb((node1));
} sort(v.begin(), v.end(), cmp);
for (int i = 0; i < v.size(); i++) ).first;
if (it != s.begin()) else tag[v[i].id] = 1;
s.insert((node2));
} else
s.erase((node2)), s.erase((node2));
} ll ans = 0;
for (int i = 1; i <= n; i++) ans += (tag[i] ? 1 : -1) * sqr(r[i]);
printf("%lld", ans);
return 0;
}
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個圓。已知這些圓兩兩沒有交點,即兩圓的關係只存在相離和包含。求這些圓的異或面 積並。異或面積並為 當一片區域在奇數個圓內則計算其面積,當一片區域在偶數個圓內...