bzoj3992 SDOI2015 序列統計

2022-05-21 13:27:12 字數 990 閱讀 1761

(題目鏈結)

集合$$中有若干個不超過$$的非負整數,問由這些數組成乙個長度$$的序列,使序列中的數的乘積對$$取模正好等於$$,問存在多少方案。

好神的題。演算法還是要多複習,我連$$都忘記怎麼寫了t_t

這還是我的第一發原根→_→。

乙個數如果有原根,那麼它會有很多原根,所以如果對時間沒有特殊限制,我們列舉$$,然後判斷是否存在$}$表示,已經放到了第$$個數,它們的乘積是$$的方案數。轉移也就很顯然了:$$^f_}$$

複雜度$$,於是我們就可以獲得10分的高分,是不是很良心啊。

考慮這個東西怎麼優化,我們把每乙個$$都寫成$$的原根的幾次方,然後乘就變成加辣,然後我們就可以卷積辣。

然後你發現$$有$$,我們快速冪一波,然後就ac辣。

一開始沒想清沒注意到還是迴圈卷積臥槽t_t

// bzoj3992

#include#include#include#include#include#include#include#define ll long long

#define inf (1ll<<30)

#define mod 1004535809

#define pi acos(-1.0)

#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);

using namespace std;

const int maxn=20010;

int f[maxn],g[maxn],rev[maxn],vis[maxn];

int n,m,rt,s,x,n,l;

int power(int a,int b,int c)

return res;

}void root(int p)

for (rt=2;;rt++)

for (int i=0,p=1;iif (p==x)

return 0;

}

bzoj3992 SDOI2015 序列統計

time limit 30 sec memory limit 128 mb submit 673 solved 327 submit status discuss 小c有乙個集合s,裡面的元素都是小於m的非負整數。他用程式編寫了乙個數列生成器,可以生成乙個長度為n的數列,數列中的每個數都屬於集合s。...

bzoj3992 SDOI2015 序列統計

不好做不好做,真心不好做。這個題顯然是dp,一開始我們這樣設計狀態f i j 表示長度為i的序列,積在模 m 意義下等於 j的數列的方案數。那顯然直接做的複雜度是o nm2 到了這裡,有一種矩陣快速冪做法,可以直接優化到o nm3 應該能過30 顯然正解不允許帶有o m3 所以矩陣肯定是不行了。到這...

bzoj3992 SDOI2015 序列統計

小c有乙個集合s,裡面的元素都是小於m的非負整數。他用程式編寫了乙個數列生成器,可以生成乙個長度為n的數列,數列中的每個數都屬於集合s。小c用這個生成器生成了許多這樣的數列。但是小c有乙個問題需要你的幫助 給定整數x,求所有可以生成出的,且滿足數列中所有數的乘積mod m的值等於x的不同的數列的有多...