洛谷3321 SDOI2015 序列统计
懒得放传送【大雾
有趣的一道题
前几天刚好听到Creed_神犇讲到相乘转原根变成卷积的形式
看到这道题当然就会做了啊w
对于m很小 我们暴力找原根 如果你不会找原根的话 出门左转百度qwq
找到原根以后所有数转成原根的幂次然后卷积就吼了啊
多项式卡速米 由于是循环卷积所以每一次还要转回系数相加再转回来
所以是不优美的O(nlg^2n) =v=
代码在这里。
//Love and Freedom.
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define inf 20021225
#define ll long long
#define wph 1004535809ll
#define mxn 810000
using namespace std;
int ksm(int bs,int mi,int mdn)
{
int ans=1;
while(mi)
{
if(mi&1) ans=(ll)ans*bs%mdn;
bs=(ll)bs*bs%mdn; mi>>=1;
}
return ans;
}
int n,m,x,s;
int G,rev[mxn<<1];
int id[mxn];
void find_G()
{
for(int i=2;i<=m;i++)
{
memset(id,0,sizeof(id));
int tmp=1,j;
for(j=0;j<m-1;j++)
{
if(id[tmp]) break;
id[tmp] = j;
tmp*=i; tmp%=m;
}
if(j==m-1){G=i;return;}
}
}
void NTT(int *a,int n,int f)
{
for(int i=0;i<n;i++) if(rev[i]>i)
swap(a[rev[i]],a[i]);
for(int k=2,mid=1;k<=n;k<<=1,mid<<=1)
{
int Wn=ksm(3,(wph-1)/k,wph);
if(f) Wn=ksm(Wn,wph-2,wph);
for(int i=0,w=1;i<n;i+=k,w=1)
for(int j=0;j<mid;j++,w=(ll)w*Wn%wph)
{
int x=a[i+j],y=(ll)w*a[i+mid+j]%wph;
a[i+j]=(x+y)%wph; a[i+mid+j]=(x-y+wph)%wph;
}
}
if(f) for(int i=0,inv=ksm(n,wph-2,wph);i<n;i++)
a[i] = (ll)a[i]*inv%wph;
}
int init(int n)
{
int lim=1,l=0;
while(lim<n) lim<<=1,l++;
for(int i=0;i<lim;i++)
rev[i] = (rev[i>>1]>>1)|((i&1)<<(l-1));
return lim;
}
void poly_ksm(int *ans,int *bs,int n,int mi)
{
//for(int i=0;i<n;i++) printf("%d ",bs[i]);
//printf("\n");
ans[0] = 1;
int lim = init(n<<1);
NTT(ans,lim,0); NTT(bs,lim,0);
//printf("%d\n",ans[0]);
while(mi)
{
if(mi&1)
{
//printf("%d\n",n);
for(int i=0;i<lim;i++)
ans[i] =(ll)ans[i]*bs[i]%wph;
NTT(ans,lim,1);
//ans[0] = 0;
for(int i=0;i<n-1;i++)
ans[i] = (ans[i]+ans[i+n-1])%wph,ans[i+n-1]=0;
NTT(ans,lim,0);
}
for(int i=0;i<lim;i++) bs[i]=(ll)bs[i]*bs[i]%wph;
NTT(bs,lim,1);
//bs[0] = 0;
for(int i=0;i<n-1;i++) bs[i]=(bs[i]+bs[i+n-1])%wph,bs[i+n-1]=0;
NTT(bs,lim,0);
mi>>=1;
}
NTT(ans,lim,1);
//for(int i=0;i<lim;i++) printf("%d ",ans[i]);
}
int a[mxn<<1],ans[mxn<<1];
int main()
{
scanf("%d%d%d%d",&n,&m,&x,&s);
find_G();int t;
for(int i=1;i<=s;i++)
{
scanf("%d",&t);
if(t%m==0) continue;
t%=m; a[id[t]]++;
}
poly_ksm(ans,a,m,n);
printf("%d\n",ans[id[x]]);
return 0;
}
洛谷3321 SDOI2015 序列统计的更多相关文章
- [洛谷P3321][SDOI2015]序列统计
题目大意:给你一个集合$n,m,x,S(S_i\in(0,m],m\leqslant 8000,m\in \rm{prime},n\leqslant10^9)$,求一个长度为$n$的序列$Q$,满足$ ...
- 洛谷P3321 [SDOI2015]序列统计(NTT)
传送门 题意:$a_i\in S$,求$\prod_{i=1}^na_i\equiv x\pmod{m}$的方案数 这题目太珂怕了……数学渣渣有点害怕……kelin大佬TQL 设$f[i][j]$表示 ...
- Luogu 3321 [SDOI2015]序列统计
BZOJ 3992 点开这道题之后才发现我对原根的理解大概只停留在$998244353$的原根是$3$…… 关于原根: 点我 首先写出$dp$方程,设$f_{i, j}$表示序列长度为$i$当前所有数 ...
- 洛咕 P3321 [SDOI2015]序列统计
显然dp就是设\(f[i][j]\)表示dp了i轮,对m取膜是j的方案数 \(f[i][xy\mod m]=f[i-1][x]\times f[i-1][y]\) 这是\(O(nm^2)\)的 像我这 ...
- 【洛谷3321_BZOJ3992】[SDOI2015]序列统计(原根_多项式)
题目: 洛谷3321 分析: 一个转化思路比较神(典型?)的题-- 一个比较显然的\(O(n^3)\)暴力是用\(f[i][j]\)表示选了\(i\)个数,当前积在模\(m\)意义下为\(j\)的方案 ...
- 【LG3321】[SDOI2015]序列统计
[LG3321][SDOI2015]序列统计 题面 洛谷 题解 前置芝士:原根 我们先看一下对于一个数\(p\),它的原根\(g\)有什么性质(好像就是定义): \(g^0\%p,g^1\%p,g^2 ...
- BZOJ 3992: [SDOI2015]序列统计 [快速数论变换 生成函数 离散对数]
3992: [SDOI2015]序列统计 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 1017 Solved: 466[Submit][Statu ...
- [SDOI2015]序列统计
[SDOI2015]序列统计 标签: NTT 快速幂 Description 给你一个模m意义下的数集,需要用这个数集生成一个数列,使得这个数列在的乘积为x. 问方案数模\(1004535809\). ...
- 3992: [SDOI2015]序列统计
3992: [SDOI2015]序列统计 链接 分析: 给定一个集和s,求多少个长度为n的序列,满足序列中每个数都属于s,并且所有数的乘积模m等于x. 设$f=\sum\limits_{i=0}^{n ...
随机推荐
- kibana使用日志时间进行排序
kibana默认的是按照客户端的采集时间(@timestamp)进行排序,这往往不是我们所需要的,我们需要的是对日志实际时间进行排序,要解决这个问题,有很多种方法,可以在elasticsearch建立 ...
- Hibernate入门学习笔记
1.Hibernate是什么? 2.hibernate怎么配置? 3.SessionFactory是干什么的?有哪些方法经常用? 4.hibernate的现成的增删改查方法怎么使用?都有哪些方法?哪些 ...
- UVA 11752 The Super Powers(暴力)
题目:https://cn.vjudge.net/problem/UVA-11752 题解:这里只讨论处理越界的问题. 因为题目最上界是 264-1. 我们又是求次幂的. 所以当我们就可以知道 i 的 ...
- 2017工业软件top100
- UNITY编辑器模式下static变量的坑
在unity中写编辑器扩展工具,如在编辑器中加个菜单,点击这个菜单项时执行打包功能. 类如下,其中的静态变量,如果每次进来不清空,则LIST会越来越大,打包函数执行完后系统不会帮我们清空 #if UN ...
- Microsoft Office Word
快捷键 选区 选择块:[Shift]+click,光标放到块的一端,然后按住Shift,然后光标放到块的另一端. 更新域: F9 右键没有更新域选项时可以使用,如更新全部域先Ctrl + A然后F9 ...
- Delphi 文件转换Base64
uses EncdDecd; function FileToBase64(FileName: string): string; var MemoryStream: TMemoryStream;beg ...
- 【MM系列】SAP SAP的账期分析和操作
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP SAP的账期分析和操作 ...
- 编程语言 - 大数据 - Hadoop
Hive - 特例函数 rlike
- CentOS7没有ifconfig/route/arp/netstat等命令的解决方案
查看提供 ifconfig 命令的包 [root@bogon ~]# yum search ifconfig 这里选择安装net-tools包即可 [root@bogon ~]# yum instal ...