【BZOJ4818】序列计数(动态规划,生成函数)
【BZOJ4818】序列计数(生成函数)
题面
题解
显然是求一个多项式的若干次方,并且是循环卷积
或者说他是一个\(dp\)也没有问题
发现项数很少,直接暴力乘就行了(\(FFT\)可能还慢一些)
然后容斥减掉没有质数的就行了
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define ll long long
#define RG register
#define MOD 20170408
#define MAX 20000200
inline int read()
{
int x=0,t=1;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
int n,m,p;
int a[100],b[100],c[100];
int ret[100];
void add(int &x,int y){x+=y;if(x>=MOD)x-=MOD;}
void Multi(int *a,int *b,int *c)
{
for(int i=0;i<p;++i)ret[i]=0;
for(int i=0;i<p;++i)
for(int j=0;j<p;++j)
add(ret[(i+j)%p],1ll*a[i]*b[j]%MOD);
for(int i=0;i<p;++i)c[i]=ret[i];
}
void fpow(int *a,int b,int *s)
{
for(int i=0;i<p;++i)s[i]=0;s[0]=1;
while(b){if(b&1)Multi(a,s,s);Multi(a,a,a);b>>=1;}
}
bool zs[MAX];
int pri[MAX/10],tot=0;
int main()
{
n=read();m=read();p=read();
for(int i=0;i<p;++i)a[i]=m/p;
for(int i=1;i<=m%p;++i)a[i]++;
fpow(a,n,b);
for(int i=0;i<p;++i)a[i]=m/p;
for(int i=1;i<=m%p;++i)a[i]++;
for(int i=2;i<=m;++i)
{
if(!zs[i])pri[++tot]=i,a[i%p]--;
for(int j=1;j<=tot&&i*pri[j]<=m;++j)
{
zs[i*pri[j]]=true;
if(i%pri[j]==0)break;
}
}
fpow(a,n,c);add(b[0],MOD-c[0]);
printf("%d\n",b[0]);
return 0;
}
【BZOJ4818】序列计数(动态规划,生成函数)的更多相关文章
- BZOJ4818 序列计数
4818: [Sdoi2017]序列计数 Time Limit: 30 Sec Memory Limit: 128 MB Description Alice想要得到一个长度为n的序列,序列中的数都是 ...
- BZOJ4818 [SDOI2017]序列计数 【生成函数 + 快速幂】
题目 Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数.Alice还希望 ,这n个数中,至少有一个数是质数.Alice想知道,有多少个序列满足她的要求. ...
- [Bzoj4818]序列计数(矩阵乘法+DP)
Description 题目链接 Solution 容斥原理,答案为忽略质数限制的方案数减去不含质数的方案数 然后矩阵乘法优化一下DP即可 Code #include <cstdio> # ...
- 【BZOJ4818】[Sdoi2017]序列计数 DP+矩阵乘法
[BZOJ4818][Sdoi2017]序列计数 Description Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数.Alice还希望 ,这n个数 ...
- BZOJ4818 LOJ2002 SDOI2017 序列计数 【矩阵快速幂优化DP】*
BZOJ4818 LOJ2002 SDOI2017 序列计数 Description Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数. Alice还希 ...
- 【BZOJ4818】【SDOI2017】序列计数 [矩阵乘法][DP]
序列计数 Time Limit: 30 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description Alice想要得到一个长度为n的序 ...
- [BZOJ4818][SDOI2017]序列计数(动规+快速幂)
4818: [Sdoi2017]序列计数 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 972 Solved: 581[Submit][Status ...
- [bzoj4818][Sdoi2017]序列计数_矩阵乘法_欧拉筛
[Sdoi2017]序列计数 题目大意:https://www.lydsy.com/JudgeOnline/problem.php?id=4818. 题解: 首先列出来一个递推式子 $f[i][0]$ ...
- P3702 [SDOI2017]序列计数
P3702 [SDOI2017]序列计数 链接 分析: 首先可以容斥掉,用总的减去一个质数也没有的. 然后可以dp了,f[i][j]表示到第i个数,和在模p下是j的方案数,矩阵快速幂即可. 另一种方法 ...
随机推荐
- 上海大智慧某站未授权访问&SQL注入
详细说明: 注入:禁用JS,http://dzh.com.cn/admin/userlist.phphttp://dzh.com.cn/admin/editUser.php?username=test ...
- 使用redux开发的简单步骤
一.安装redux包 npm install redux --save 二.根据APP数据结构或者后台请求的数据结构拟定state的大致结构. 可以把state写成一个对象字面量,放在reducer文 ...
- springMVC框架下返回json格式的对象,list,map
原文地址:http://liuzidong.iteye.com/blog/1069343 注意这个例子要使用jQuery,但是jquery文件属于静态的资源文件,所以要在springMVC中设置静态资 ...
- 关于<meta>的各种用处以及移动端的常见问题
1.优先使用最新版本的IE和Chrome <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1& ...
- Kali-linux测试网络范围
测试网络范围内的IP地址或域名也是渗透测试的一个重要部分.通过测试网络范围内的IP地址或域名,确定是否有人入侵自己的网络中并损害系统.不少单位选择仅对局部IP基础架构进行渗透测试,但从现在的安全形势来 ...
- mysql学习之join用法
转载 一张图看懂 SQL 的各种 join 用法 一.JOIN 使用介绍 下面例子使用的数据表如下: -- ---------------------------- -- Table structu ...
- 手绘web原型设计的感受
当下有许多流行的Web原型设计工具,比如mockplus等,mockplus在我们团队初次开发rms系统用到过,确实还不错,但是,原型工具有其优势也有其劣势. 礼拜一开会时,经理跟我说,觉得现在的LM ...
- Linux 系统下Eclipse安装及使用
Linux 系统下Eclipse安装及使用 我们在搞上层开发的时候,都是在Windows下使用Eclipse,那么如果是Linux应用开发,就必须要在Linux中安装Eclipse,用于C/C++开发 ...
- sendmail启动报错
sendmail启动不了,报错如下: 解决方法: 在/etc/mail/sendmail.cf 配置文件中查找 Dj$w,并在此行下面增加这一行. Dj$w. 在/etc/hosts 增加一行 192 ...
- 利用SQL模糊匹配来验证字段是否是日期格式
最近需要验证数据仓库某个字段是否转化成某种日期格式,比如时间戳格式 ‘2016-05-03 23:21:35.0‘, 但是DB2不支持REGEXP_LIKE(匹配)函数,所以需要重新想其他办法. 最后 ...