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

2022-05-01 20:54:08 字數 1544 閱讀 4309

先膜一發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_^j^im^j=n^im^-\sum\limits_^m^j[(j-1)^i-j^i]

\]其中,\((j-1)^i-j^i\)可以用一波二項式展開化為\(\sum\limits_^\binom(-1)^j^k\),回帶可得

\[(m-1)f(i)=n^im^-\sum\limits_^m^j\sum\limits_^\binom(-1)^j^k$$$$=n^im^-\sum\limits_^\binom(-1)^\sum\limits_^j^km^j$$$$=n^im^-\sum\limits_^\binom(-1)^f(k)

\]然後就有了乙個\(o(m^2)\)的遞推做法,還有乙個\(o(m)\)的,但看起來挺麻煩的,咕了

以下是**,注意初值\(f(0)\)的設定還有\(m=1\)時的特判

#include #include  #include   #include   #include    #include    #include    #include     #include     #include     #include       #include       using namespace std;

#define ull unsigned long long

#define pii pair#define uint unsigned int

#define mii map#define lbd lower_bound

#define ubd upper_bound

#define inf 0x3f3f3f3f

#define iinf 0x3f3f3f3f3f3f3f3fll

#define vi vector#define ll long long

#define mp make_pair

#define pb push_back

#define re register

#define il inline

#define mod 1000000007

#define m 1000

int n, m;

int c[m+5][m+5];

int f[m+5];

int fpow(int x, int p)

return ret;

}void init()

int main()

init();

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

f[i] = (1ll*f[i]*fpow(m-1, mod-2)%mod+mod)%mod;

} printf("%d\n", f[m]);

return 0;

}

bzoj3157 國王奇遇記

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

BZOJ 3157 國王奇遇記

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 ...

擾動法 BZOJ3157 國王奇遇記

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