「SDOI2017」序列计数

思路:

  矩阵快速幂;

代码:

#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的更多相关文章

  1. AC日记——「HNOI2017」单旋 LiBreOJ 2018

    #2018. 「HNOI2017」单旋 思路: set+线段树: 代码: #include <bits/stdc++.h> using namespace std; #define max ...

  2. AC日记——「SCOI2016」幸运数字 LiBreOJ 2013

    「SCOI2016」幸运数字 思路: 线性基: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 20005 # ...

  3. AC日记——「SCOI2016」背单词 LiBreOJ 2012

    #2012. 「SCOI2016」背单词 思路: Orz: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 1 ...

  4. AC日记——「SCOI2015」国旗计划 LiBreOJ 2007

    #2007. 「SCOI2015」国旗计划 思路: 跪烂Claris 代码: #include <cstdio> #include <algorithm> #define ma ...

  5. loj#2002. 「SDOI2017」序列计数(dp 矩阵乘法)

    题意 题目链接 Sol 质数的限制并没有什么卵用,直接容斥一下:答案 = 忽略质数总的方案 - 没有质数的方案 那么直接dp,设\(f[i][j]\)表示到第i个位置,当前和为j的方案数 \(f[i ...

  6. loj2002 「SDOI2017」序列计数

    水题 #include <iostream> #include <cstring> #include <cstdio> using namespace std; t ...

  7. AC日记——「HNOI2017」礼物 LiBreOJ 2020

    #2020. 「HNOI2017」礼物 思路: A题进程: 一眼出式子->各种超时过不去->看题解明白还有fft这个东西->百度文库学习fft->学习dft->学习fft ...

  8. AC日记——「SCOI2016」美味 LiBreOJ 2016

    #2016. 「SCOI2016」美味 思路: 主席树: 代码: #include <bits/stdc++.h> using namespace std; #define maxa 26 ...

  9. AC日记——「SCOI2015」情报传递 LiBreOJ 2011

    #2011. 「SCOI2015」情报传递 思路: 可持久化树状数组模板: 代码: #include <bits/stdc++.h> using namespace std; #defin ...

随机推荐

  1. HDU3308 线段树(区间合并)

    LCIS Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  2. FreeRTOS - 任务使用注意

    如果使用xTaskCreate() 创建任务,任务栈使用的是FreeRTOS heap

  3. Moodle通过CLI安装

    Moodle通过CLI安装 前提:Moodle准备工作已经完成 1) 数据库(及用户) 2) moodledata目录 3) 源代码及站点配置 安装过程 打开终端,或通过Putty或Xshell等软件 ...

  4. ITEXT5 Font 'd:\SIMSUN.TTC' with 'Identity-H' is not recognized.

    用 itextsharp 制作PDF文件的时候发生错误 Font 'd:\SIMSUN.TTC' with 'Identity-H' is not recognized. 原本是 BaseFont b ...

  5. git代码冲突

    如果系统中有一些配置文件在服务器上做了配置修改,然后后续开发又新添加一些配置项的时候, 在发布这个配置文件的时候,会发生代码冲突: error: Your local changes to the f ...

  6. EF数据更新时候异常情况一

    在不熟练EF的时候有时更新数据时候会报以下异常: 错误原因:此时操作的实体不是从数据库里获取的.而是自己new出来的实体然后赋值的.EF此时的存储池中已经有了这个实体,在new一个对象ID相同就不能共 ...

  7. 洛谷 P3709 大爷的字符串题

    https://www.luogu.org/problem/show?pid=3709 题目背景 在那遥远的西南有一所学校 /*被和谐部分*/ 然后去参加该省省选虐场 然后某蒟蒻不会做,所以也出了一个 ...

  8. Ubuntu12.04 安装nginx和mongo过程

    1.安装php和php-cgi apt-get install php5 php5-cgi 2.安装 nginx apt-get install nginx 3.安装 MongoDB apt-get ...

  9. GitLab 迁移与升级

    参考: [ 博客园 BigBao ] 环境说明: OS: CentOS 7.x gitlab-ce 初始版本: 8.8.5 gitlab-ce 升级到版本: 11.2.3 升级方式: rpm 安装升级 ...

  10. vue_router添加点击事件

    1.在vue学习中遇到给router-link 标签添加事件@click .@mouseover等无效的情况 原来的代码: <router-link to='/SelectPage' @clic ...