bzoj 3992: [SDOI2015]序列统计 NTT+原根
今天开始学习丧心病狂的多项式qaq...... .
code:
#include <bits/stdc++.h>
#define ll long long
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int qpow(int x,int y,int mod)
{
int res=1;
while(y)
{
if(y&1) res=1ll*res*x%mod;
x=1ll*x*x%mod;
y>>=1;
}
return res;
}
const int Mod=1004535809,G=3,iG=qpow(G,Mod-2,Mod),MAX_M=300000;
int fact[10000];
int GetRoot(int x)
{
int tot=0;
int phi=x-1;
for(int i=2;i*i<=phi;++i) if(phi%i==0) { fact[++tot]=i; while(phi%i==0) phi/=i; }
if(phi>1) fact[++tot]=phi;
phi=x-1;
for(int i=2;i<=phi;++i)
{
bool flag=1;
for(int j=1;j<=tot&&flag;++j)
if(qpow(i,phi/fact[j],x)==1) flag=0;
if(flag) return i;
}
return -1;
}
int limit,rev[MAX_M];
void NTT(int *p,int op)
{
for(int i=0;i<limit;++i) if(i<rev[i]) swap(p[i],p[rev[i]]);
for(int i=1;i<limit;i<<=1)
{
int rot=qpow(op==1?G:iG,(Mod-1)/(i<<1),Mod);
for(int j=0;j<limit;j+=(i<<1))
{
int w=1;
for(int k=0;k<i;++k,w=1ll*w*rot%Mod)
{
int x=p[j+k],y=1ll*w*p[i+k+j]%Mod;
p[j+k]=(x+y)%Mod, p[i+j+k]=(x-y+Mod)%Mod;
}
}
}
if(op==-1)
{
int inv=qpow(limit,Mod-2,Mod);
for(int i=0;i<limit;++i) p[i]=1ll*p[i]*inv%Mod;
}
}
map<int,int>mp;
int N,M,S,X,F[MAX_M],H[MAX_M];
void mul(int *A,int *B,int *C)
{
static int res[MAX_M],a[MAX_M],b[MAX_M];
for(int i=0;i<limit;++i) a[i]=A[i],b[i]=B[i];
NTT(a,1), NTT(b,1);
for(int i=0;i<limit;++i) a[i]=1ll*a[i]*b[i]%Mod;
NTT(a,-1);
for(int i=0;i<M-1;++i) res[i]=(a[i]+a[i+M-1])%Mod;
for(int i=0;i<M-1;++i) C[i]=res[i];
}
int main()
{
// setIO("input");
scanf("%d%d%d%d",&N,&M,&X,&S);
int g=GetRoot(M);
for(int i=0;i<M-1;++i) mp[qpow(g,i,M)]=i;
for(int i=1,x;i<=S;++i)
{
scanf("%d",&x);
x%=M;
if(x) F[mp[x%M]]++;
}
H[mp[1]]=1;
int p=0;
for(limit=1;limit<=2*M;limit<<=1,++p);
for(int i=0;i<limit;++i) rev[i]=(rev[i>>1]>>1)|((i&1)<<(p-1));
while(N)
{
if(N&1) mul(H,F,H);
mul(F,F,F);
N>>=1;
}
printf("%d\n",H[mp[X]]);
return 0;
}
bzoj 3992: [SDOI2015]序列统计 NTT+原根的更多相关文章
- BZOJ 3992: [SDOI2015]序列统计 NTT+快速幂
3992: [SDOI2015]序列统计 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 1155 Solved: 532[Submit][Statu ...
- bzoj 3992: [SDOI2015]序列统计【原根+生成函数+NTT+快速幂】
还是没有理解透原根--题目提示其实挺明显的,M是质数,然后1<=x<=M-1 这种计数就容易想到生成函数,但是生成函数是加法,而这里是乘法,所以要想办法变成加法 首先因为0和任何数乘都是0 ...
- bzoj 3992 [SDOI2015]序列统计——NTT(循环卷积&&快速幂)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3992 有转移次数.模M余数.方案数三个值,一看就是系数的地方放一个值.指数的地方放一个值.做 ...
- bzoj 3992 [SDOI2015] 序列统计 —— NTT (循环卷积+快速幂)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3992 (学习NTT:https://riteme.github.io/blog/2016-8 ...
- BZOJ 3992: [SDOI2015]序列统计 快速幂+NTT(离散对数下)
3992: [SDOI2015]序列统计 Description 小C有一个集合S,里面的元素都是小于M的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为N的数列,数列中的每个数都属于集合S ...
- [BZOJ 3992][SDOI2015]序列统计
3992: [SDOI2015]序列统计 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 2275 Solved: 1090[Submit][Stat ...
- BZOJ 3992: [SDOI2015]序列统计 [快速数论变换 生成函数 离散对数]
3992: [SDOI2015]序列统计 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 1017 Solved: 466[Submit][Statu ...
- BZOJ.3992.[SDOI2015]序列统计(DP NTT 原根)
题目链接 \(Description\) 给定\(n,m,x\)和集合\(S\).求\(\prod_{i=1}^na_i\equiv x\ (mod\ m)\)的方案数.其中\(a_i\in S\). ...
- 【BZOJ】3992: [SDOI2015]序列统计 NTT+生成函数
[题意]给定一个[0,m-1]范围内的数字集合S,从中选择n个数字(可重复)构成序列.给定x,求序列所有数字乘积%m后为x的序列方案数%1004535809.1<=n<=10^9,3< ...
随机推荐
- 通过ip查询相关网络位置信息
结果:
- spring Aop切面中的@Before @Around等执行顺序与请求参数统一解码
1.背景 在实际开发中,我可能会对请求接口做统一日志输出,或者统一参数解析,验签,统一响应加密等,通常会用到aop,实际案例如下 2.代码 package com.qianxingniwo.log; ...
- Echarts 学习系列(1)-5分钟上手ECharts
目录 写在前面 下载Echarts和主题 绘制一个简单的图表 写在前面 最近,在做某个项目的时候.需要使用的可视化的图表显数据.最后,选择了百度的Echarts. 下载Echarts和主题 1.获取E ...
- 思维导图xmind的文档保存问题
如果文件名相同,可能最新的文档覆盖以前的.当前活动文档只能有一个,如果有多个,保存后,其他活动文档也被更新了. 新建一个空白doc文档,仅仅是文件名,作为附件导入到xmind中,在xmind中保存后, ...
- 【转载】socket通信-C#实现tcp收发字符串文本数据
在日常碰到的项目中,有些场景需要发送文本数据,也就是字符串,比如简单的聊天文字,JSON字符串等场景.那么如何如何使用SharpSocket来收发此类数据呢?其中要掌握的关键点是什么呢? 点击查看原博 ...
- WinForm的TextBox限制只能输入数字并且屏蔽默认右键菜单
基于Window消息实现 class TextBoxExt:TextBox { private const int WM_RBUTTONDOWN = 0x0204; private const int ...
- 解决Spring Boot 从1.x升级到 2.x 后 单点登陆(SSO)问题
解决Spring Boot 从1.x升级到 2.x 后 单点登陆(SSO)问题 在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把Spring S ...
- JVM 源码解读之 CMS 何时会进行 Full GC
t点击上方"涤生的博客",关注我 转载请注明原创出处,谢谢!如果读完觉得有收获的话,欢迎点赞加关注. 前言 本文内容是基于 JDK 8 在文章 JVM 源码解读之 CMS GC 触 ...
- java操作excel-----poi
一.所需依赖包 1.使用maven会自动导入相关依赖,所以只需要导入2007版的的包,其他包自动导入,包括2003所需jar包. <dependency> <groupId>o ...
- 分页查询——Hibernate Criteria实现一次查询取得总记录数和分页后结果集
使用Hibernate criteria进行分页查询时,如何实现一次查询取得总记录数和分页后结果集 - bto310 - ITeye博客 https://bto310.iteye.com/blog/1 ...