51nod 1362 搬箱子 組合數公式

2021-07-26 10:14:14 字數 1586 閱讀 9186

天吶51nod是不是特別喜歡卡常啊

這題一直推公式推到複雜度足夠低就可以了,感謝班上的數競大爺毛公給我的指點

列舉一下斜向下的操作有多少次,令它為

a ,令豎著走為b,

a+b=

n 總共有n+m-a次操作,其中有三種操作,可以很簡單的得到答案 an

s=∑m

i=0∑

na=0

can+

m−ac

bn+m

−2a 其中b = n-a

然後把組合數寫成階乘形式(我也不知道我當時怎麼想的,這做法看起來挺笨的) an

s=∑m

i=0∑

na=0

(n+m

−a)!

a!(n

+m−2

a)!(

n+m−

2a)!

(n−a

)!(m

−a)!

消去乙個(n

+m−2

a)!

ans=

∑mi=

0∑na

=01a

!(n−

a)!(

n+m−

a)!(

m−a)

! 發現左右兩個式子長得很像組合數,把它配上,分子分母同時乘n!

ans=∑mi

=0∑n

a=0n

!a!(

n−a)

!(n+

m−a)

!n!(

m−a)

! an

s=∑m

i=0∑

na=0

canc

nn+m

−a根據乘法分配律,把乙個求和提出來 an

s=∑n

a=0c

an(∑

mi=0

cnn+

m−a)

根據組合數公式(推到這裡推不下去覺得這裡一定有公式,問了問毛公果然有) cx

0+cx

1+cx

2+..

.cxm

=cx+

1m+1

那麼 an

s=∑n

a=0c

ancn

+1n+

m−a+

1 線性篩+分解質因數求組合數就可以了,注意要卡常!

#include 

#include

#include

#define n 10000

using

namespace

std;

typedef

long

long ll;

int p[n],cnt,f[n];

bool prime[n];

ll cur,ans,mod;

int n,m,x;

void _prime()

}}int qp(int a,int &b)

return r;

}void calc(int x,int v)

int c(int x,int y)

int main()

51nod 瞬間移動 組合數學

1627 瞬間移動 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 收藏 關注 有乙個無限大的矩形,初始時你在左上角 即第一行第一列 每次你都可以選擇乙個右下方格仔,並瞬移過去 如從下圖中的紅色格仔能直接瞬移到藍色格仔 求到第n行第m列的格仔有幾種方案,答案對10...

51nod 1627 瞬間移動 組合數

有乙個無限大的矩形,初始時你在左上角 即第一行第一列 每次你都可以選擇乙個右下方格仔,並瞬移過去 如從下圖中的紅色格仔能直接瞬移到藍色格仔 求到第n行第m列的格仔有幾種方案,答案對1000000007取模。單組測試資料。兩個整數n,m 2 n,m 100000 output 乙個整數表示答案。inp...

51nod1639 組合數學)

題意 中文題誒 思路 組合數學 n根鞋帶要組成乙個環,那麼顯然與連成一根鞋帶之前不成環是衝要條件 假設當前還剩下 i i 1 根鞋帶,要從中選擇兩根鞋帶頭連線後不成環的概率為 pi 不成環的選擇方法數 所有選擇方法數 所有方法數 c 2 i,2 2 i 2 i 1 2 i 2 i 1 成環的方法數 ...