[Bzoj4818]序列计数(矩阵乘法+DP)
Description
Solution
容斥原理,答案为忽略质数限制的方案数减去不含质数的方案数
然后矩阵乘法优化一下DP即可
Code
#include <cstdio>
#include <algorithm>
#include <cstring>
#define N 120
using namespace std;
const int MOD=20170408;
int n,m,p,pri[2000010],cnt[N],top;
bool vis[20000010];
struct info{
int A[N][N];
info(){for(int i=0;i<p;++i)for(int j=0;j<p;++j)A[i][j]=0;}
int *operator [](int x){return A[x];}
friend info operator *(info a,info b){
info c;
for(int i=0;i<p;++i)
for(int j=0;j<p;++j)
for(int k=0;k<p;++k)
c[i][j]=(c[i][j]*1ll+1ll*a[i][k]*b[k][j]%MOD)%MOD;
return c;
}
}t1,t2,g;
inline info Pow(info A,int c){
info res;
for(int i=0;i<p;++i) res[i][i]=1;
for(;c;c>>=1,A=A*A) if(c&1) res=res*A;
return res;
}
int main(){
scanf("%d%d%d",&n,&m,&p);
vis[1]=1;
for (int i=2;i<=m;i++){
if (!vis[i])pri[++top]=i;
for (int j=1;j<=top&&i*1ll*pri[j]<=m;j++){
vis[i*pri[j]]=1;
if(i%pri[j]==0)break;
}
}
for(int i=1;i<=m;++i) cnt[i%p]++;
for(int i=0;i<p;++i)for(int j=0;j<p;++j)g[i][j]=cnt[(i-j+p)%p];
t1[0][0]=t2[0][0]=1;
t1=t1*Pow(g,n);
memset(cnt,0,sizeof(cnt));
for(int i=1;i<=m;++i) if(vis[i]) cnt[i%p]++;
for(int i=0;i<p;++i)for(int j=0;j<p;++j)g[i][j]=cnt[(i-j+p)%p];
t2=t2*Pow(g,n);
printf("%d\n",(t1[0][0]-t2[0][0]+MOD)%MOD);
return 0;
}
[Bzoj4818]序列计数(矩阵乘法+DP)的更多相关文章
- 【BZOJ4818】【SDOI2017】序列计数 [矩阵乘法][DP]
序列计数 Time Limit: 30 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description Alice想要得到一个长度为n的序 ...
- 【bzoj4818】[Sdoi2017]序列计数 矩阵乘法
原文地址:http://www.cnblogs.com/GXZlegend/p/6825132.html 题目描述 Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的 ...
- [BZOJ 4818/LuoguP3702][SDOI2017] 序列计数 (矩阵加速DP)
题面: 传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4818 Solution 看到这道题,我们不妨先考虑一下20分怎么搞 想到暴力,本蒟 ...
- [Sdoi2017]序列计数 矩阵优化dp
题目 https://www.lydsy.com/JudgeOnline/problem.php?id=4818 思路 先考虑没有质数限制 dp是在同余系下的,所以\(f[i][j]\)表示前i个点, ...
- BZOJ 4818 [Sdoi2017]序列计数 ——矩阵乘法
发现转移矩阵是一个循环矩阵. 然后循环矩阵乘以循环矩阵还是循环矩阵. 据说还有FFT并且更优的做法. 之后再看吧 #include <map> #include <cmath> ...
- luogu 3702 [SDOI2017]序列计数 矩阵乘法+容斥
现在看来这道题真的不难啊~ 正着求不好求,那就反着求:答案=总-全不是质数 这里有一个细节要特判:1不是质数,所以在算全不是质数的时候要特判1 code: #include <bits/stdc ...
- Codevs 1305 Freda的道路(矩阵乘法 DP优化)
1305 Freda的道路 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description Freda要到Rainbow的城堡去玩了.我们可以认 ...
- bzoj 4818: [Sdoi2017]序列计数【容斥原理+dp+矩阵乘法】
被空间卡的好惨啊---- 参考:http://blog.csdn.net/coldef/article/details/70305596 容斥,\( ans=ans_{没有限制}-ans{没有质数} ...
- Luogu3702 SDOI2017 序列计数 矩阵DP
传送门 不考虑质数的条件,可以考虑到一个很明显的$DP:$设$f_{i,j}$表示选$i$个数,和$mod\ p=j$的方案数,显然是可以矩阵优化$DP$的. 而且转移矩阵是循环矩阵,所以可以只用第一 ...
随机推荐
- LoadRunner性能测试之常见函数及参数的说明和作用
- Linux命令之文件重定向2
linux中重定向用符号“>”表示,语法一般是 源文件 > 目标文件 1)创出.txt文件touch 1.txt 注意:创建文件夹用mkdir 2)向.txt文件中写入内容 注意:①cat ...
- Typora使用
Typora使用 1.介绍 typora是一款不错的软件. 1.1 基本使用 html js css python java vb 1.2 无序列表 a b c d e f 1.3 java代码 pu ...
- Angular2、4入门基础知识(小的概念)
1. 使用引用符来格式化HTML代码. @Component({ selector: 'app-heroes', templateUrl: './heroes.component.html', sty ...
- 【转载】#324 - A Generic Class Can Have More than One Type Parameter
A generic class includes one or more type parameters that will be substituted with actual types when ...
- IOS 计算文字尺寸(UILabel)
方式1 :普通用法 #define MJNameFont [UIFont systemFontOfSize:14] /** * 计算文字尺寸 * * @param text 需要计算尺寸的文字 * ...
- 【HHHOJ】ZJOI2019模拟赛(十四)03.12 解题报告
点此进入比赛 得分: \(50+5+24=79\) 排名: \(Rank\ 2\) \(Rating\):\(+79\) \(T1\):[HHHOJ197]古明地(点此看题面) 基本上全部时间都用来想 ...
- Uva 10820 交表
题目链接:https://uva.onlinejudge.org/external/108/10820.pdf 题意: 对于两个整数 x,y,输出一个函数f(x,y),有个选手想交表,但是,表太大,需 ...
- 【转】VMware虚拟机系统无法上网怎么办?
有很多用户通过安装VMware软件来创建虚拟机系统,其中就有部分用户在创建好虚拟机系统后遇到无法上网的问题,下面PC6苹果网小编就给大家带来VMware虚拟机系统下无法上网的解决办法: 1.在虚拟机右 ...
- php图像处理插件imagick安装(仅适用于86位,php5.4非安全环境-16px)
phpImageMagick-6.7.7-5-Q16-windows-dll(加测试代码,经测试,仅适用于86位,php5.4安全环境-16px) 下载地址:http://pan.baidu.com/ ...