清華2019冬令營模擬12 8 視野

2021-09-02 22:19:45 字數 2790 閱讀 9516

計算幾何弱渣果然就是一點感覺也沒有。

首先考慮不刪怎麼做?

肯定要把點給離散,那麼現在對於每一小段,要求出是哪條線段最近?

按乙個順序掃過去,每一條線段打乙個加入和刪除的標記。

由於線段互不相交,所以線段順序不會隨著小段的移動而改變。

因此,我們可以用乙個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能多走...