loj2002 「SDOI2017」序列计数
水题
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
typedef long long ll;
int n, m, p, cnt[105], pri[2000005], ppp, ans=0;
const int mod=20170408;
bool isp[20000005];
struct Matrix{
int num[105][105];
Matrix operator*(const Matrix &x)const{
Matrix re;
for(int i=0; i<p; i++)
for(int j=0; j<p; j++){
re.num[i][j] = 0;
for(int k=0; k<p; k++)
re.num[i][j] = (re.num[i][j] + (ll)num[i][k]*x.num[k][j]) % mod;
}
return re;
}
}yua, dan, zhu;
Matrix ksm(Matrix a, int b){
Matrix re=dan;
while(b){
if(b&1) re = re * a;
a = a * a;
b >>= 1;
}
return re;
}
void shai(){
memset(isp, true, sizeof(isp));
isp[0] = isp[1] = false;
for(int i=2; i<=m; i++){
if(isp[i]) pri[++ppp] = i;
for(int j=1; j<=ppp && (ll)i*pri[j]<=m; j++){
isp[i*pri[j]] = false;
if(i%pri[j]==0) break;
}
}
}
int main(){
cin>>n>>m>>p;
shai();
for(int i=1; i<=m; i++)
cnt[i%p]++;
yua.num[0][0] = 1;
for(int i=0; i<p; i++){
dan.num[i][i] = 1;
for(int j=0; j<p; j++)
zhu.num[i][j] = cnt[((i-j)%p+p)%p];
}
ans = (yua*ksm(zhu, n)).num[0][0];
for(int i=1; i<=ppp; i++)
cnt[pri[i]%p]--;
for(int i=0; i<p; i++){
dan.num[i][i] = 1;
for(int j=0; j<p; j++)
zhu.num[i][j] = cnt[((i-j)%p+p)%p];
}
ans = ((ans - (yua*ksm(zhu, n)).num[0][0])%mod + mod) % mod;
cout<<ans<<endl;
return 0;
}
loj2002 「SDOI2017」序列计数的更多相关文章
- AC日记——「SDOI2017」序列计数 LibreOJ 2002
「SDOI2017」序列计数 思路: 矩阵快速幂: 代码: #include <bits/stdc++.h> using namespace std; #define mod 201704 ...
- loj#2002. 「SDOI2017」序列计数(dp 矩阵乘法)
题意 题目链接 Sol 质数的限制并没有什么卵用,直接容斥一下:答案 = 忽略质数总的方案 - 没有质数的方案 那么直接dp,设\(f[i][j]\)表示到第i个位置,当前和为j的方案数 \(f[i ...
- 「SDOI2017」树点涂色 解题报告
「SDOI2017」树点涂色 我sb的不行了 其实一开始有一个类似动态dp的想法 每个点维护到lct树上到最浅点的颜色段数,然后维护一个\(mx_{0,1}\)也就是是否用虚儿子的最大颜色 用个set ...
- Loj #3059. 「HNOI2019」序列
Loj #3059. 「HNOI2019」序列 给定一个长度为 \(n\) 的序列 \(A_1, \ldots , A_n\),以及 \(m\) 个操作,每个操作将一个 \(A_i\) 修改为 \(k ...
- 「HNOI2016」序列 解题报告
「HNOI2016」序列 有一些高妙的做法,懒得看 考虑莫队,考虑莫队咋移动区间 然后你在区间内部找一个最小值的位置,假设现在从右边加 最小值左边区间显然可以\(O(1)\),最小值右边的区间是断掉的 ...
- LibreOJ 2003. 「SDOI2017」新生舞会 基础01分数规划 最大权匹配
#2003. 「SDOI2017」新生舞会 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- loj #2051. 「HNOI2016」序列
#2051. 「HNOI2016」序列 题目描述 给定长度为 n nn 的序列:a1,a2,⋯,an a_1, a_2, \cdots , a_na1,a2,⋯,an,记为 a[1: ...
- 「JSOI2014」序列维护
「JSOI2014」序列维护 传送门 其实这题就是luogu的模板线段树2,之所以要发题解就是因为学到了一种比较NB的 \(\text{update}\) 的方式.(参见这题) 我们可以把修改操作统一 ...
- 「BZOJ2839」集合计数
「BZOJ2839」集合计数 题目大意: 一个包含 \(n\) 个数的集合有 \(2^n\) 个子集,从这些子集中取出若干个集合(至少一个),使他们的交集的元素个数恰好为 \(k\),求方案数,答案对 ...
随机推荐
- simhash与重复信息识别
在工作学习中,我往往感叹数学奇迹般的解决一些貌似不可能完成的任务,并且十分希望将这种喜悦分享给大家,就好比说:“老婆,出来看上帝”…… 随着信息爆炸时代的来临,互联网上充斥着着大量的近重复信息,有效地 ...
- Ajax返回数据格式
Ajax中返回数据的格式 Ajax中常见的返回数据的格式有三种:分别为文本,XML和JSON 返回的文本格式我们在上一堂课Ajax基础介绍中已经介绍过了 Ajax.php Form.html:通过 ...
- JS排序--快速排序
用 JavaScript 实现快速排序代码如下: /* * @author liphong * @data 2019/02/24 */ var arr = []; // 需要被排序数组 /* * 分离 ...
- BootStrap的基本使用
bootstrap 现成的css样式,直接调用类作用是快速写出页面又称UI框架Bootstrap中文网LESS是预处理器CSS预处理器定义了一种新的语言,基本的思想是用一种专门的编程语言,开发者只需要 ...
- 微信公众号与HTML 5混合模式揭秘5——JSSDK开发技巧1
微信公众号与HTML 5混合模式揭秘1——如何部署JSSDK 微信公众号与HTML 5混合模式揭秘2——分享手机相册中照片 微信公众号与HTML 5混合模式揭秘3——JSSDK获取地理位置 微信公众号 ...
- MFC 消息中( WPARAM wParam,LPARAM lParam)包含信息
windows的消息具有以下两个参数: (1)字参数(wParam) (2)长参数(lParam) 字参数和长参数都是32位整数,用于提供消息的附带消息,是消息传递过程中参数的载体.附加信息的消息号取 ...
- Android 视频录制 java.lang.RuntimeException: start failed.
//mRecorder.setVideoSize(320, 280); // mRecorder.setVideoFrameRate(5); mRecorder.setOutputFile(viodF ...
- jquery mobile 的手指上下滑动文章、导航栏
导航栏的js设置 <!--导航栏的滚动 --> <script type="text/javascript"> var myScroll, pullDown ...
- Oracle 存储过程调用语句
#oracle 存储过程调用语句declare v_custName varchar2(10); --客户姓名 v_num number; --订单分布天数 v_time number; --每日订单 ...
- 编写Robotium测试程序
6.编写Robotium测试程序 1)导包 //导入需要测试的工程 import com.example.android.notepad.NotesList; //robotium提供的测试用类 im ...