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\),求方案数,答案对 ...
随机推荐
- nodejs 学习(4) express+mongoose
一.关于安装和启动: 1.设置环境变量:D:\Program Files\MongoDB\bin 2.启动时需要cd到bin 目录,然后 mongod --dbpath "D:\mongdb ...
- G. Of Zorcs and Axes 二分 + 贪心 —— STL的用法
http://codeforces.com/gym/101149/problem/G 一开始还以为要用二分图去做,但是复杂度也太高了,O(n * m)的话直接爆炸. 考虑贪心,考虑第i个东西优先选一个 ...
- TDH-kafka
一.kafka原理:1.broker:一个kafka实例,多个broker组成kafka集群: 2.topic:逻辑概念,同一类数据的集合,可以看做一张表: 3.producer:将数据写入topic ...
- corn表达式 经典
https://www.cnblogs.com/GarfieldTom/p/3746290.html
- 正则表达式匹配URL——给URL地址加上<a> 链接
<?php function replace_url ($content) { if (empty($content)) return; //给URL地址加上 <a> 链接 $pre ...
- JMeter--PerfMon Metrics Collector监控内存及CPU
1.需要准备的软件及插件 ServerAgent-2.2.1.zip JMeterPlugins-Standard-1.3.1.zip 2.jmeter上JMeterPlugins-Standard- ...
- winform 更新服务器程序
感谢csdn jekytan 的共享 http://download.csdn.net/detail/jekytan/4242666 本地xml文件 <?xml version="1. ...
- hihoCoder #1068 : RMQ-ST算法(模板)
AC G++ 826ms 146MB 思路: 时间复杂度O(nlogn). //#include <bits/stdc++.h> #include <iostream> #in ...
- codeforces Gym 100338E Numbers (贪心,实现)
题目:http://codeforces.com/gym/100338/attachments 贪心,每次枚举10的i次幂,除k后取余数r在用k-r补在10的幂上作为候选答案. #include< ...
- Objective-C中关于NSArray, NSDictionary, NSNumber等写法的进化
从xcode4.4开始,LLVM4.0编译器为Objective-C添加一些新的特性.创建数组NSArray,哈希表NSDictionary, 数值对象NSNumber时,可以像NSString的初始 ...