Bzoj4818--Sdoi2017序列计数
Description
Input
Output
//That's right ,I am killer . #include<bits/stdc++.h> #define LL long long #define eps 1e-9 #define INF 0x3f3f3f3f using namespace std;#define int int inline int Max(int a,int b) {return a>b?a:b;} inline int Min(int a,int b) {return a<b?a:b;} inline int Sqr(int a) {return a*a;} inline int Abs(int a) {return a>0?a:-a;} #undef int#define MAXN 20000007 #define MOD 20170408int n,m,p;struct Matrix{int x[105][105];void Init() {memset(x,0,sizeof(x));}void Out() {for(int i=0;i<p;i++) {for(int j=0;j<p;j++) cout<<x[i][j]<<" ";cout<<endl;}}Matrix operator * (const Matrix &b) const {Matrix ret;ret.Init();for(int i=0;i<p;i++) for(int j=0;j<p;j++)for(int k=0;k<p;k++) ret.x[i][k]=(ret.x[i][k]+(LL) x[i][j]*b.x[j][k])%MOD;return ret;} }st,tra[2],e;Matrix Fpow(Matrix a,int p) {Matrix ret=e,tmp=a;while(p) {if(p&1) ret=ret*tmp;tmp=tmp*tmp; p>>=1;}return ret; }int pri[MAXN],cnt;bool mk[MAXN]; int ap[2][105]; void Pre() { st.x[0][0]=1;for(int i=0;i<p;i++) e.x[i][i]=1;mk[1]=1;for(int i=2;i<=m;i++) {if(!mk[i]) pri[++cnt]=i;for(int j=1;j<=cnt&&i*pri[j]<=m;j++) {mk[i*pri[j]]=1;if(i%pri[j]==0) break;}}for(int i=1;i<=m;i++) {ap[0][i%p]++;ap[1][i%p]+=mk[i] ? 1:0;}for(int k=0;k<p;k++) for(int i=0;i<p;i++) {tra[0].x[(i+k)%p][i]+=ap[0][k];tra[1].x[(i+k)%p][i]+=ap[1][k];} }int ans;int main() {scanf("%d%d%d",&n,&m,&p);Pre();tra[0]=Fpow(tra[0],n)*st;tra[1]=Fpow(tra[1],n)*st;ans=tra[0].x[0][0]-tra[1].x[0][0];ans=(ans+MOD)%MOD;printf("%d\n",ans);return 0; }
View Code
转载于:https://www.cnblogs.com/ihopenot/p/6707542.html
Bzoj4818--Sdoi2017序列计数相关推荐
- 2019.02.11 bzoj4818: [Sdoi2017]序列计数(矩阵快速幂优化dp)
传送门 题意简述:问有多少长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数,且其中至少有一个数是质数,答案对201704082017040820170408取模(n≤1e9, ...
- BZOJ4818 [SDOI2017] 序列计数 【矩阵快速幂】
题目分析: 一个很显然的同类项合并.注意到p的大小最大为100,考虑把模p意义下相同的求出来最后所有的减去没有质数的做矩阵快速幂即可. 代码: 1 #include<bits/stdc++.h& ...
- bzoj 4818: [Sdoi2017]序列计数(DP+矩阵快速幂)
4818: [Sdoi2017]序列计数 Time Limit: 30 Sec Memory Limit: 128 MB Submit: 769 Solved: 463 [Submit][Stat ...
- Luogu3702 SDOI2017 序列计数 矩阵DP
传送门 不考虑质数的条件,可以考虑到一个很明显的$DP:$设$f_{i,j}$表示选$i$个数,和$mod\ p=j$的方案数,显然是可以矩阵优化$DP$的. 而且转移矩阵是循环矩阵,所以可以只用第一 ...
- 【BZOJ4818】【SDOI2017】序列计数 [矩阵乘法][DP]
序列计数 Time Limit: 30 Sec Memory Limit: 128 MB [Submit][Status][Discuss] Description Alice想要得到一个长度为n的 ...
- 序列计数(动态规划/自动机/前缀和优化)
序列计数 对于一个小写字母的序列每次可以将相邻两个不同的小写字母都变为二者之一,可以进行无限次这样的操作,求解可以产生多少种不同的序列. 首先我们不能考虑操作,而是考虑合法序列,显然最后会形成若干个区 ...
- loj#2002. 「SDOI2017」序列计数(dp 矩阵乘法)
题意 题目链接 Sol 质数的限制并没有什么卵用,直接容斥一下:答案 = 忽略质数总的方案 - 没有质数的方案 那么直接dp,设\(f[i][j]\)表示到第i个位置,当前和为j的方案数 \(f[i ...
- 蓝桥杯 - 序列计数(记忆化搜索)
问题描述 小明想知道,满足以下条件的正整数序列的数量: 1. 第一项为 n: 2. 第二项不超过 n: 3. 从第三项开始,每一项小于前两项的差的绝对值. 请计算,对于给定的 n,有多少种满足条件的序 ...
- python统计元音总数_python – 元音序列计数
这不是一个家庭作业问题,而是一个考试准备问题. 我应该定义一个功能音节(单词)来计算音节的数量 用以下方式说一句话: •最大元音序列是一个音节; •单词中的最后一个不是音节(或者是元音序列,它是一个部 ...
最新文章
- 你在python项目中遇到的问题_魔法02 Python环境可能遇到的问题及解决方案
- 【Linux 内核】线程调度示例一 ③ ( 获取线程优先级 | 设置线程调度策略 | 代码示例 )
- python简单的web服务器
- python程序设计实验教程 翟萍 第五章答案_Python程序设计实验教程
- 数据源名称和 64 位操作系统
- 20220129CTF刷题-- WEB方向
- By Elevator or Stairs? CodeForces - 1249E(动态规划)
- 爱彼迎JavaScript 风格指南
- Disconnected from the target VM, address:xxxx 或者 Process finished with exit code 1 终极解决办法 idea
- 如何安装html启动器,如何在Spring Boot中创建自己的启动器?
- linux中使用u盘和光驱的命令_Linux学习之挂载光盘和U盘(六)
- canvas放射粒子效果
- 关于log4net 生成多个文件夹的解决方案。
- 开源框架Struts:FormBean滴那些事儿
- NSSM 注册PYTHON服务
- PS CS6启动“不能打开暂存盘文件”的解决方法
- c语言中char与static
- javascript解决猴子偷桃问题
- 珠海横琴凯悦酒店开业
- 如何从iPhone的音乐应用程序中删除Apple Music