天吶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 成環的方法數 ...