清華集訓2017模擬12 10 大佬的難題

2021-08-13 06:40:52 字數 1300 閱讀 1461

1<=n<=2e6,時限:2.5s

容斥原理瞎搞。

設a,b,c分別為滿足三個條件的集合。

根據容斥原理,有: a∪

b∪c=

a+b+

c−a∩

b−a∩

c−b∩

c+a∩

b∩c

而a∪b∪c同時會等同於總數n∗

(n−1

) -都大於的個數(即都小於的個數a∩

b∩c )

所以: n∗

(n−1

)−a∩

b∩c=

a+b+

c−a∩

b−a∩

c−b∩

c+a∩

b∩c

2∗a∩

b∩c=

n∗(n

−1)−

a−b−

c+a∩

b+a∩

c+b∩

c a

=b=c

=n∗(

n−1)

/2

所以: 2∗

a∩b∩

c=a∩

b+a∩

c+b∩

c−n∗

(n−1

)/2

a∩b∩

c=a∩

b+a∩

c+b∩

c−n∗

(n−1

)/22

求a∩b+a

∩c+b

∩c可以直接用樹狀陣列搞三次,常數小。

code:

#include

#include

#include

#define ll long long

#define fo(i, x, y) for(int i = x; i <= y; i ++)

#define low(a) ((a) & -(a))

using

namespace

std;

const

int n = 2e6 + 5;

int a[3][n], n;

ll seed;

ll rand()

void gen(int *a)

ll ans;

int f[n], z[n];

void gao(int p, int q)

}int main()

清華集訓2017模擬 ces

首先把用tajan把橋邊全部找出來,橋邊會把圖分成若干個雙聯通分量。把每個雙聯通分量並成乙個點,橋邊作為邊,這會構成一棵樹。顯然,對於每個詢問加k條邊最多能去掉多少條橋邊,就是用k條簡單路徑去覆蓋這棵樹,最多能覆蓋多少條邊。有乙個很優的貪心,把k按1 q做,每次找到樹的直徑,答案加上直徑的長度,把直...

清華集訓2017模擬12 09 塔

有乙個塔,他的名字叫做粽粑,粽粑的每一層都有乙個顏色 粽粑非常厲害,它在吸收天地精華之後會長高.粽粑的長高方式有兩種 1.在塔頂長出一層.2.在塔底長出一層,即原來的第一層變成第二層,第二層變成第三層,以此類推,新長出來的是第一層.粽粑有可能在某個時刻不是很開心,這個時候它會撤銷它的前若干次長高.你...

清華集訓2017模擬12 09 塔

有乙個塔,他的名字叫做粽粑,粽粑的每一層都有乙個顏色 粽粑非常厲害,它在吸收天地精華之後會長高.粽粑的長高方式有兩種 1.在塔頂長出一層.2.在塔底長出一層,即原來的第一層變成第二層,第二層變成第三層,以此類推,新長出來的是第一層.粽粑有可能在某個時刻不是很開心,這個時候它會撤銷它的前若干次長高.你...