SDOI2015 序列統計

2022-05-19 02:33:17 字數 1117 閱讀 8389

題意:

給定乙個集合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 ...