BZOJ 3157 國王奇遇記

2022-05-13 11:12:33 字數 1235 閱讀 2743

bzoj 3157 傳送門

題意:求解$\sum_^n m^i \cdot $

$o(m^2)$做法:

定義乙個函式$f[i]$,$f[i]=\sum_^n k^i \cdot $

$(m-1)\cdot f(i)=\sum_^n k^i \cdot m^ - \sum_^n k^i \cdot m^k$

$= \sum_^ (k - 1)^i\cdot m^k - \sum_^n k^i \cdot m^k $

$=  n^i \cdot m^ + \sum_^n m^k \sum_^ \cdot (-1)^ \cdot k^j $

$=  n^i \cdot m^ + \sum_^ \cdot (-1)^ \sum_^n k^j \cdot m^k $

$=  n^i \cdot m^ + \sum_^ \cdot (-1)^ \cdot f(j) $

接下來只要預處理$c_i^j$,遞推即可

#include using

namespace

std;

typedef

long

long

ll;const

int maxn=1e3+10

;const

int mod=1e9+7

;ll c[maxn][maxn],f[maxn],n,m,pre,dvs;

ll quick_pow(ll a,ll b)

return

res;

}int

main()

pre=quick_pow(m,n+1);dvs=quick_pow(m-1,mod-2

); c[

0][0]=1

;

for(int i=1;i<=m;i++)

f[0]=(pre-m+mod)%mod;(f[0]*=dvs)%=mod;

for(int i=1;i<=m;i++)

(f[i]+=mod)%=mod;(f[i]*=dvs)%=mod;

}printf(

"%lld

",f[m]);

return0;

}

此題的加強版:bzoj 3516/bzoj 4126

最後一題要用到$o(m)$的演算法,然而我並不能看懂

resources:

杜教**:

也許先補一補多項式定理再多看看具體數學沒有公式密集恐懼症了就能看懂了?

bzoj3157 國王奇遇記

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

擾動法 BZOJ3157 國王奇遇記

求 sum ni mm i n leq 1e9,m leq 200 其實我也不知道這東西為啥叫 擾動法 大概是在黑暗的邊緣試探?就是那種,人家再多一點就被您看破了,然後您就一定要搞他那麼一點去試探他的限度,一不小心給他搞爆了,這種感覺。擾動三連 等比數列求和 sum na i,a i a 1 q 令...

BZOJ3157 國王奇遇記 神奇的推式子

先膜一發miskcoo,大佬的部落格上多項式相關的非常全 原題戳我 求 sum limits i mm i 設乙個函式 f i sum limits j im j 然後貌似用乙個叫擾動法 感覺就是錯位相消法 的東西,算一下 m 1 f i sum limits j 1 im j sum limits...