計算幾何弱渣果然就是一點感覺也沒有。
首先考慮不刪怎麼做?
肯定要把點給離散,那麼現在對於每一小段,要求出是哪條線段最近?
按乙個順序掃過去,每一條線段打乙個加入和刪除的標記。
由於線段互不相交,所以線段順序不會隨著小段的移動而改變。
因此,我們可以用乙個set去維護插入刪除,比較遠近時,就求交,判斷誰近。
那麼第一問答案就出來了。
第二問、第三問都是一樣的。
刪掉一條線段,對一小段來說,如果刪掉了最近的那一條線段,答案會增加它和第二條線段的面積,那麼維護v[i]表示刪掉第i條線段面積增加多少,ans1=ans0+max(v[i])
第三問,首先答案是ans0+max(v[i])+cmax(v[i])
但是我們會發現我們少考慮了一種情況,那就是如果線段i和線段j是一小段的最近和次近,其實選擇他們還會增加第二條線段到第三條線段的面積,隨便做。
總複雜度是o(n
logn
)o(n log n)
o(nlog
n)注意用atan2(y,x)這個函式可以方便地做幾角排序。
code:
#include
#include
#include
#include
#define db double
#define fo(i, x, y) for(int i = x; i <= y; i ++)
using namespace std;
const
int n =
5e4+5;
int n;
const db eps =
1e-8
;struct p
p(db x_, db y_)
} p, q;
struct l
l(p p_, p v_)};
p operator +
(p a, p b)
p operator -
(p a, p b)
p operator *
(p a, db b)
db operator ^
(p a, p b)
db dot
(p a, p b)
db len
(p a)
p jd
(l a, l b)
l a[n]
, ty, tz;
struct nod };
bool operator <
(nod x, nod y)
set s;
struct nod2 d[n *2]
;int d0, d;
const db pi =
acos(-
1);db jj
(p p)
intcmp2
(nod2 a, nod2 b)
int c[n][2
], c0[n]
;struct edge
} e;
db ans0, ans1, ans2, v[n]
;db calc
(int x)
struct nod3 w[n *2]
;int w0;
intc***
(nod3 a, nod3 b)
intmain()
}}fo(i,
1, n)
fo(i,
1, d)
if(s.
empty()
)else
else
else}}
}fo(i,1
, n) ans1 =
max(ans1, ans0 + v[i]);
db c0 =
0, c1 =0;
fo(i,
1, n)
if(v[i]
> c1)
c0 = c1, c1 = v[i]
;else
if(v[i]
> c0) c0 = v[i];if
(ans2 <
1e10
) ans2 = ans0 + c0 + c1;
sort
(w +
1, w + w0 +
1, c***);fo
(i,2
, w0 +1)
if(i > w0 || w[i -1]
.x != w[i]
.x || w[i -1]
.y != w[i]
.y)else w[i]
.z +
= w[i -1]
.z;if
(ans0 >
1e10
)printf
("infinite\n");
else
printf
("%.2lf\n"
, ans0);if
(ans1 >
1e10
)printf
("infinite\n");
else
printf
("%.2lf\n"
, ans1);if
(ans2 >
1e10
)printf
("infinite\n");
else
printf
("%.2lf\n"
, ans2)
;}
清華2019冬令營模擬12 15 排列
考慮對乙個值i它的區間的長度是多少。區間可以只考慮右半部分的,左邊的倒過來做一遍就行了。若i是固定的,找到右邊第乙個固定的j i 那麼區間肯定不能超過j所在的位置。可以直接列舉區間的右端點,這個右端點選的大於i,它左邊的小於i,剩餘的亂排,用排列數算即可。這一部分o n 2 o n 2 o n2 若...
2019徐州冬令營
day1 長短 模擬 資料提取碼 1t2n 題目鏈結 day2 生成排列 資料提取碼 z6e7 題目鏈結 排列組合計數的實驗範例 catalan數 bell數 stirling數 day3 鴿巢原理 資料提取碼 k6b9 題目鏈結 容斥原理 p lya計數公式 群和p lya定理基礎知識 day4 ...
5507 清華冬令營2018模擬 取石子
直接說做法了,挺好理解的。欽定a b a le b a b。設r x mod a b r x mod a b r xmod a b 分四種情況討論 r 0,a 1 r in 0,a 1 r 0,a 1 這個情況沒有意義。r a,b 1 r in a,b 1 r a,b 1 這個情況下,a aa能多走...