AC日记——「SDOI2017」序列计数 LibreOJ 2002
思路:
矩阵快速幂;
代码:
#include <bits/stdc++.h>
using namespace std;
#define mod 20170408
#define ll long long
struct MatrixType {
int n,m;
ll ai[][];
void mem(int n_,int m_)
{
n=n_,m=m_;
for(int i=;i<=n;i++) for(int v=;v<=m;v++) ai[i][v]=;
}
MatrixType operator*(const MatrixType pos)const
{
MatrixType res;res.mem(this->n,pos.m);
for(int i=;i<=res.n;i++)
for(int v=;v<=res.m;v++)
for(int x=;x<=this->m;x++)
res.ai[i][v]=(res.ai[i][v]+(this->ai[i][x]*pos.ai[x][v])%mod)%mod;
return res;
}
void debug()
{
puts("");
printf("%d %d\n",n,m);
for(int i=;i<=;i++)
{
for(int v=;v<=;v++) printf("%d ",this->ai[i][v]);
putchar('\n');
}
puts("");
}
};
int n,m,p,pi[],cnt,ai[],bi[];
bool if_p[];
MatrixType poww(MatrixType pos,int mi)
{
MatrixType res=pos;mi--;
while(mi)
{
if(mi&) res=res*pos;
mi=mi>>,pos=pos*pos;
}
return res;
}
void ouler(int lit)
{
for(int i=;i<=lit;i++)
{
if(!if_p[i]) pi[++cnt]=i;
for(int j=;pi[j]*i<=lit&&j<=cnt;j++)
{
if_p[i*pi[j]]=true;
if(i%pi[j]==) break;
}
}
}
int main()
{
//freopen("ans3.txt","w",stdout);
scanf("%d%d%d",&n,&m,&p),ouler(m);
MatrixType sta1;sta1.mem(,p-);
sta1.ai[][]=;
MatrixType pos1,pos2,ans1,ans2;
pos1.mem(p-,p-),pos2.mem(p-,p-);
for(int i=;i<=m;i++) ai[i%p]++;
for(int i=;i<p;i++) bi[i]=ai[i];
for(int i=;i<=cnt;i++) bi[pi[i]%p]--;
for(int i=;i<p;i++)
{
for(int v=;v<p;v++)
{
if(i>v) pos1.ai[i][v]=ai[i-v],pos2.ai[i][v]=bi[i-v];
if(i==v) pos1.ai[i][v]=ai[],pos2.ai[i][v]=bi[];
if(i<v) pos1.ai[i][v]=ai[p-v+i],pos2.ai[i][v]=bi[p-v+i];
}
}
pos1=poww(pos1,n),pos2=poww(pos2,n);
ans1=sta1*pos1,ans2=sta1*pos2;
cout<<(ans1.ai[][]-ans2.ai[][]+mod)%mod;
return ;
}
AC日记——「SDOI2017」序列计数 LibreOJ 2002的更多相关文章
- AC日记——「HNOI2017」单旋 LiBreOJ 2018
#2018. 「HNOI2017」单旋 思路: set+线段树: 代码: #include <bits/stdc++.h> using namespace std; #define max ...
- AC日记——「SCOI2016」幸运数字 LiBreOJ 2013
「SCOI2016」幸运数字 思路: 线性基: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 20005 # ...
- AC日记——「SCOI2016」背单词 LiBreOJ 2012
#2012. 「SCOI2016」背单词 思路: Orz: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 1 ...
- AC日记——「SCOI2015」国旗计划 LiBreOJ 2007
#2007. 「SCOI2015」国旗计划 思路: 跪烂Claris 代码: #include <cstdio> #include <algorithm> #define ma ...
- loj#2002. 「SDOI2017」序列计数(dp 矩阵乘法)
题意 题目链接 Sol 质数的限制并没有什么卵用,直接容斥一下:答案 = 忽略质数总的方案 - 没有质数的方案 那么直接dp,设\(f[i][j]\)表示到第i个位置,当前和为j的方案数 \(f[i ...
- loj2002 「SDOI2017」序列计数
水题 #include <iostream> #include <cstring> #include <cstdio> using namespace std; t ...
- AC日记——「HNOI2017」礼物 LiBreOJ 2020
#2020. 「HNOI2017」礼物 思路: A题进程: 一眼出式子->各种超时过不去->看题解明白还有fft这个东西->百度文库学习fft->学习dft->学习fft ...
- AC日记——「SCOI2016」美味 LiBreOJ 2016
#2016. 「SCOI2016」美味 思路: 主席树: 代码: #include <bits/stdc++.h> using namespace std; #define maxa 26 ...
- AC日记——「SCOI2015」情报传递 LiBreOJ 2011
#2011. 「SCOI2015」情报传递 思路: 可持久化树状数组模板: 代码: #include <bits/stdc++.h> using namespace std; #defin ...
随机推荐
- phalcon安装
参考网站:https://docs.phalconphp.com/zh/latest/reference/tools.html (中文版)cento6.5环境安装:cd ~mkdir phalconc ...
- bzoj 2599 [IOI2011]Race 点分
[IOI2011]Race Time Limit: 70 Sec Memory Limit: 128 MBSubmit: 4768 Solved: 1393[Submit][Status][Dis ...
- HDU1255 扫描线 矩形交面积 离散化
覆盖的面积 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- Java设计模式の适配器模式
定义 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 适配器模式的用途 用电器做例子,笔记本电脑的插头一般都是三相的,即除了阳极 ...
- 使用html5的Geolocation API实现定位
公司有个需求,需要获取用户的位置,所以看了下html5的Geolocation 这个新东西,发现挺好用的. <!DOCTYPE html> <html> <body> ...
- rocketmq单机搭建
RocketMQ 是alibaba开源的消息队列. 本文使用的是开源版本v3.18 系统: centos6.x最小化安装 需要用到的软件包: jdk-7u67-linux-x64.tar.gz ali ...
- UVA 1210 Sum of Consecutive Prime Numbers
https://vjudge.net/problem/UVA-1210 统计质数前缀和,枚举左右端点,这一段的区间和+1 #include<cstdio> #define N 10001 ...
- 2015/8/26 Python基础(1):基本规则及赋值
Python有如下的基本规则: #后表示注释 \n是行分隔符 \是继续上一行,将过长语句分开 :分号将两个语句连接在一行中 :冒号将代码头和体分开 代码块用缩进块的方式体现 不同缩进深度分隔不同的代码 ...
- [洛谷P3460] [POI2007]TET-Tetris Attack
洛谷题目链接:[POI2007]TET-Tetris Attack 题目描述 A puzzle called "Tetris Attack" has lately become a ...
- 【bzoj2038-小z的袜子】莫队算法
莫队例题. 莫队学习:https://www.cnblogs.com/Paul-Guderian/p/6933799.html 本题 分子是sigma(c(sum[a[i]],2)),分母是sigma ...