「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. HDU 1044 BFS

    Collect More Jewels Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  2. HDU2688 树状数组(逆序数)

    Rotate Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  3. Kafka消息delivery可靠性保证(Message Delivery Semantics)

    原文见:http://kafka.apache.org/documentation.html#semantics kafka在生产者和消费者之间的传输是如何保证的,我们可以知道有这么几种可能提供的de ...

  4. C语言实现单链表的遍历,逆序,插入,删除

    单链表的遍历,逆序,插入,删除 #include<stdio.h> #include<stdlib.h> #include <string.h> #define b ...

  5. vue实现菜单权限控制

    大家在做后台管理系统时一般都会涉及到菜单的权限控制问题.当然解决问题的方法无非两种——前端控制和后端控制.我们公司这边的产品迭代速度较快,所以我们是从前端控制路由迭代到后端控制路由.下面我会分别介绍这 ...

  6. 数据结构:ST表

    BZOJ1699 在经历了树套树和主席树的洗礼之后,所有的数据结构都显得格外地亲切,和自然.. ST算法能够实现O(nlogn)的预处理的情况下完成O(1)的区间最值查询 虽然这要求区间是静态的,也就 ...

  7. 【C++ STL】容器的选择

    c++提供了各具特长的容器,那么我们该如何选择最佳的容器? 缺省状态下应该选择vector,因为vector内部结构最简单,并允许随机存取,所以数据的存取十分方便,数据的处理也快. 如果经常要在头部和 ...

  8. ssh无密码登录认证失败

    http://www.2cto.com/os/201401/271150.html https://unix.stackexchange.com/questions/36540/why-am-i-st ...

  9. linux percpu机制解析【转】

    转自:http://blog.csdn.net/wh8_2011/article/details/53138377 一.概述 每cpu变量是最简单也是最重要的同步技术.每cpu变量主要是数据结构数组, ...

  10. arm---先搞清楚各种版本号【转】

    转自:http://blog.csdn.net/linnoo/article/details/53214689 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] ARM的几种版本 ...