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 ...
随机推荐
- Android提示框与通知的使用
1.通知 Android 3.0以前使用的方法 NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION ...
- Codeforces Round #407 (Div. 2) D,E
图论 D. Weird journey time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- HDU5154拓扑排序
Harry and Magical Computer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- X210串口配置与stdio移植
串口控制器初始化关键步骤 (1)初始化串口的Tx和Rx引脚所对应的GPIO(查原理图可知Rx和Rx分别对应GPA0_1和GPA0_0) (2)GPA0CON(0xE0200000),bit[3:0] ...
- Mybatis中传入List条件
传入一个map的参数,map里有一个tenantIds的List,在xml里先判断这个List的size是否大于o,然后通过foreach 构造一个in后面括号里的元素,具体的xml如下: <i ...
- [LeetCode] Binary Tree Level Order Traversal 与 Binary Tree Zigzag Level Order Traversal,两种按层次遍历树的方式,分别两个队列,两个栈实现
Binary Tree Level Order Traversal Given a binary tree, return the level order traversal of its nodes ...
- AngularJS学习——价格计算器
利用AngularJs实现价格计算器,总价满100免运费.(熟悉$watch的使用)
- idea中设置springboot热部署
在idea中设置springboot热部署,项目修改的时候不用手动重启应用 1,pom中添加依赖 <dependency> <groupId>org.springframewo ...
- PowerDesigner16 设置导出sql文件的编码
一: 导出数据库结构sql脚本 Database -> Generate Database 在弹窗中选择Format选项卡,修改Encoding,选择自己需要的编码格式. 二:比较数据库差异 ...
- mysql 服务端事务和客户端事务对比分析
之前做mysql事务测试的时候都是在mysql服务端存储过程里面包含事务. 例如: CREATE DEFINER=`root`@`localhost` PROCEDURE `Test`(out deb ...