2020杭電多校第5場

2021-10-08 23:39:20 字數 3586 閱讀 7060

1001 tetrahedron

直角三稜錐有乙個性質:底面面積的平方等於三個側面面積的平方和。

然後根據體積可以算出來h,

1 h2

=a2b

2+a2

c2+b

2c2a

2b2c

2\frac=\frac

h21​=a

2b2c

2a2b

2+a2

c2+b

2c2​

這樣在o(n)的時間是沒法算期望的,再化簡一步就好了

1 h2

=1a2

+1b2

+1c2

\frac=\frac+\frac+\frac

h21​=a

21​+

b21​

+c21

​根據 e(x+y)= e (x)+ e(y) 可得

e (1

h2)=

3e(1

a2

)e(\frac)=3e(\frac)

e(h21​

)=3e

(a21

​)所以求1到n的平方的倒數的字首和就好。

#include

using

namespace std;

typedef

long

long ll;

const

int n=

6e6+10;

const

int mod=

998244353

;int inv[n]

,sum[n]

;void

init()

intmain()

}

1009 *****folding

這幾次紙可以發現展開之後的紙會被切割成網格,左折和右折的效果是一樣的,上折和下折的效果是一樣的,如果左右折的次數是x,上下折的次數是y,最終會被分成(2x

+1)∗

(2y+

1)

(2^x+1) * (2^y+1)

(2x+1)

∗(2y

+1)份,最終的份數只與摺疊的次數有關,與摺疊的先後順序沒有關係。

將左右折看做乙個操作,上下折看做乙個操作,總共會有 2

n2^n

2n種操作,如果左右折了i次,那麼上下折就是n-i次,這種情況的次數就是

c ni

∗(2i

+1)∗

(2n−

i+1)

c_^*(2^i+1)*(2^ +1)

cni​∗(

2i+1

)∗(2

n−i+

1)所以:ans

=∑i=

0ncn

i(2i

+1)(

2n−i

+1)2

nans=\frac^c_^(2^i+1)(2^+1)}

ans=2n

∑i=0

n​cn

i​(2

i+1)

(2n−

i+1)​=∑

i=0n

(cni

2n+c

ni+c

ni2i

+cni

2n−i

)2

n=\frac^(c_^2^n+c_^+c_^2^i+c_^2^)}

=2n∑i=

0n​(

cni​

2n+c

ni​+

cni​

2i+c

ni​2

n−i)​=2

2n+2

n+∑i

=0nc

ni2i

+∑i=

0ncn

n−i2

n−i2

n=\frac+2^n+\sum_^c_^2^i+\sum_^c_^}}

=2n22n

+2n+

∑i=0

n​cn

i​2i

+∑i=

0n​c

nn−i

​2n−

i​= 22

n+2n

+2∗3

n2

n=\frac+2^n+2*3^}

=2n22n

+2n+

2∗3n

#include

using

namespace std;

typedef

long

long ll;

const

int mod=

998244353

;int t;

ll n;

ll ksm

(ll a,ll b)

return res;

}int

main()

return0;

}

1012 set1

首先前n/2個數是一定會被刪掉的所以都是0,那麼當i>n/2時,要想保留地i個數,前i-1個數一定會被刪去,後面的n-i個數也要被刪,後面的這n-i個數一定不會最為最小值被刪因為i還沒被刪,所以從前i-1個數中選n-i個數與他們配對,方案就是ci−

1n−i

c_^ci

−1n−

i​* (n-i)! ,前i-個數中剩下了i-1-n+i個數記為cnt,cnt一定是偶數,每次刪之前這幾個數的最小值都是確定的只能從剩下的數中再選乙個數。所以方案數就是 比cnt小的所有奇數的乘積,兩式相乘就是i被剩下的方案數。

總的方案數是多少:每次刪除時最小值是確定的n是奇數,所以等於 比n小的所有偶數的乘積。

#include

using

namespace std;

const

int n=

5e6+

10,mod=

998244353

;typedef

long

long ll;

int t,n,pre[n]

,inv[n]

,po[n]

,p[n]

;ll ksm

(ll a,ll b)

return res;

}ll c

(int n,

int m)

void

init()

intmain()

for(

int i=

1;i<=n/

2;i++

)printf

("0 ");

ll res=

ksm(pre[n-1]

,mod-2)

;printf

("%lld "

,po[n/2]

*res%mod)

;for

(int i=

(n+1)/

2+1;i)printf

("%lld"

,p[n-2]

*res%mod)

;puts(""

);}return0;

}

2020 杭電多校第6場

1009 divisibility 題意 十進位制下判斷乙個數n能否被3整除的方法是 判斷n的各位數的和能否被3整除,現給你乙個b和x,判斷再b進製下能否用這種方法判斷所有數能否整除x。打表可以找規律。include using namespace std typedef long long ll ...

杭電多校2020第7場 E Expectation

有一種做法 列舉每個球滾到哪個坑里,算出其概率,再乘上球到這個坑的距離,把結果相加。但是你會發現,這樣子很難處理,而且有許許多多複雜的情況。我們換乙個角度 對於每乙個 i 和 i 1 之間的線段,我們算其被經過的期望次數。手玩一會兒不難發現有如下結論 對於一條線段,如果其左邊為洞,右邊為球,那麼肯定...

2020杭電多校

hdu 6836 對於一張圖,每個生成樹的權值為所有邊按位與的結果,求生成樹期望權值。樸素解法 暴力求出每乙個生成樹,累積權值和,然後除生成樹總數。int型別只有31位,既然是與的結果,對於每一條生成樹所有的邊該位都應該是1,按位列舉每一位,求出該位為1的生成樹權值大小,將結果累積到答案裡。incl...