(題目鏈結)
集合$$中有若干個不超過$$的非負整數,問由這些數組成乙個長度$$的序列,使序列中的數的乘積對$$取模正好等於$$,問存在多少方案。
好神的題。演算法還是要多複習,我連$$都忘記怎麼寫了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的不同的數列的有多...