bzoj 3157 3516 國王奇遇記 數學

2021-08-17 10:14:36 字數 2176 閱讀 3720

給出n,m,求∑n

i=1i

mmi ∑i=

1nim

mi

n<=109

,m<=

1000

n

<=109

,m

<=

1000

當m=1

m =1

時這顯然是乙個自然數冪和,用插值法來求就好了。

考慮當m

>

1 m

>

1的時候,設s=

∑i=1

nimm

i s=∑

i=1n

immi

兩邊同乘m m

可得ms=∑i

=1ni

mmi+

1' role="presentation" style="text-align: center; position: relative;">ms=

∑i=1

nimm

i+1m

s=∑i

=1ni

mmi+

1兩式相減得到(m

−1)s

=∑i=

1mim

(mi+

1−mi

) (m−

1)s=

∑i=1

mim(

mi+1

−mi)

=∑i=2nm

i((i

−1)m

−im)

−m+n

mmn+

1 =∑i

=2nm

i((i

−1)m

−im)

−m+n

mmn+

1把左邊部分用二項式定理展開一下可得=∑

i=2n

mi∑j

=0m−

1cjm

ij(−

1)m−

j =∑i

=2nm

i∑j=

0m−1

cmji

j(−1

)m−j

交換主體=∑

j=0m

−1cj

m(−1

)m−j

∑i=2

nmii

j =∑j

=0m−

1cmj

(−1)

m−j∑

i=2n

miij

對於j j

我們可以列舉,對於右邊

∑' role="presentation" style="position: relative;">∑

∑的求法可以參照

這篇文章。

時間複雜度是o(

m2) o(m

2)

至於更難的加強版

2 2

,感覺不是很做的動,以後再來補坑好了。

#include

#include

#include

#include

#include

using namespace std;

typedef long long ll;

const int n=1005;

const int mod=1000000007;

int n,m,jc[n],ny[n],s[n];

int ksm(int

x,int

y) return ans;

}int c(int n,int

m)void prework(int k,int r)

s[i]=(ll)s[i]*ksm(r-1,mod-2)%mod;

}}int main()

prework(m,m);

int ans=((ll)ksm(n,m)*ksm(m,n+1)%mod-m)%mod;

for (int j=0;j<=m-1;j++)

if ((m-j)&1) (ans-=(ll)c(m,j)*(

s[j]-m)%mod)%=mod;

else (ans+=(ll)c(m,j)*(

s[j]-m)%mod)%=mod;

printf("%d",((ll)ans*ksm(m-1,mod-2)%mod+mod)%mod);

return

0;}

BZOJ 3157 3516 4126 國王奇遇記

目錄題目傳送門1 題目傳送門2 題目傳送門3 計算 sum i m m i 10 9 7 1 leq n leq 10 9 bzoj3157 1 leq m leq 200 bzoj3516 1 leq m leq 1000 bzoj4126 1 leq m leq 50000 一般題目短的都很毒這...

BZOJ4711 小奇挖礦

題目背景 小奇在喵星系使用了無限非概率驅動的採礦機,以至於在所有星球上都採出了一些礦石,現在它準備建一些礦石倉 庫並把礦石運到各個倉庫裡。問題描述 喵星系有n個星球,標號為1到n,星球以及星球間的航線形成一棵樹。所有星球間的雙向航線的長度都為1。小奇要 在若干個星球建礦石倉庫,設立每個倉庫的費用為k...

bzoj3157 國王奇遇記

emmm。直接看題解好了 o m 不懂扔掉 總之,給我們另乙個處理複雜求和的方法 找到函式之間的遞推公式!這裡用錯位相減,然後想辦法轉化 由於根據二項式定理,展開之後會出現k i的乘方,所以展開,有助於變成f j 遞推下去 o m 2 include define reg register int ...