題意:
給定乙個集合s,裡面的數都是小於m的非負整數。
求長度為n的數列個數,滿足:
稱數列a和b不同當且僅當存在i使得$a_i \neq b_i$。
答案對1004535809取模。
$n\leq 10^,m\leq 8000,m是質數$。
題解:實際上就是要求類似於$f_i=\sum \limits_$的卷積。
這東西沒法直接做,但如果我們令$j=g^,k=g^$,那麼就變成了我們熟悉的$f_z=\sum \limits_$的形式。
這題中g就等於m的原根。找原根可以直接列舉g,如果$\exists x\neq m-1,g^=1$,則g不合法。
求出原根後直接跑個卷積快速冪即可,注意此時最高次項應為$m-1$。
由於每次需要把$f_$加到$f_i$上,然後令$f_=0$,所以不能直接對點值快速冪,必須每乘一次就轉成係數表示法。
複雜度$o(m \log\log)$。
套路:**:
#include#define maxn 200005序列統計#define maxm 500005
#define inf 0x7fffffff
#define mod 1004535809
#define g 3
#define ll long long
#define rint register ll
#define debug(x) cerr<
namespace
std;
ll m,vis[maxn],ind[maxn];
inline ll read()
inline ll pw(ll a,ll b,ll mo)
struct
poly
inline
void
ntt(ll op)
}if(op==-1
) }
};inline poly mul(poly a,poly b)
inline poly solve(poly a,ll b)
returnr;}
inline ll calc(ll x)
}int
main()
SDOI2015 序列統計
time limit 30 sec memory limit 128 mb submit 1829 solved 870 submit status discuss 小c有乙個集合s,裡面的元素都是小於m的非負整數。他用程式編寫了乙個數列生成器,可以生成乙個長度為n的數 列,數列中的每個數都屬於集合...
SDOI2015 序列統計
description 小c有乙個集合s,裡面的元素都是小於m的非負整數。他用程式編寫了乙個數列生成器,可以生成乙個長度為n的數列,數列中的每個數都屬於集合s。小c用這個生成器生成了許多這樣的數列。但是小c有乙個問題需要你的幫助 給定整數x,求所有可以生成出的,且滿足數列中所有數的乘積mod m的值...
SDOI2015 序列統計
點此看題 第一次寫ntt text ntt,被搞自閉了。0x01 樸素dp 設f i j f i j f i j 為選i ii個數乘積為j jj的方案數,轉移如下 f 2 i j f i k f i j inv k f 2i j f i k times f i j times inv k f 2i ...