BZOJ 4818 [Sdoi2017]序列计数 ——矩阵乘法
发现转移矩阵是一个循环矩阵。
然后循环矩阵乘以循环矩阵还是循环矩阵。
据说还有FFT并且更优的做法。
之后再看吧
#include <map>
#include <cmath>
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define ll long long
#define mp make_pair
#define md 20170408
#define maxn 20000005 int pri[maxn],top,p,n,m;
bool vis[maxn];
int cnt[2][101];//0 质数 1 非质数 void init()
{
memset(vis,false,sizeof vis);
cnt[0][1]++;cnt[1][1]++;
F(i,2,m)
{
if (!vis[i]) pri[++top]=i,cnt[0][i%p]++;
else cnt[0][i%p]++,cnt[1][i%p]++;
for (int j=1;j<=top&&(ll)i*pri[j]<=m;++j)
{
vis[i*pri[j]]=true;
if (i%pri[j]==0) break;
}
}
} struct Matrix{
int x[101][101];
void init(){memset(x,0,sizeof x);}
void build1()
{
init();
F(i,0,p-1) F(j,0,p-1)
(x[i][(i+j)%p]+=cnt[1][j])%=md;
}
void builde()
{
init();
F(i,0,p-1) x[i][i]=1;
}
void build0()
{
init();
F(i,0,p-1) F(j,0,p-1)
(x[i][(i+j)%p]+=cnt[0][j])%=md;
}
Matrix operator * (Matrix a) {
Matrix ret;
ret.init();
F(i,0,p-1) F(j,0,p-1) F(k,0,p-1)
(ret.x[i][j]+=x[i][k]*a.x[k][j])%=md;
return ret;
}
Matrix operator ^ (Matrix a){
Matrix ret;
ret.init();
F(j,0,p-1) F(k,0,p-1)
ret.x[0][j]=((ll)ret.x[0][j]+(ll)x[0][k]*a.x[k][j])%md;
F(i,1,p-1)
{
ret.x[i][0]=ret.x[i-1][p-1];
F(j,1,p-1) ret.x[i][j]=ret.x[i-1][j-1];
}
return ret;
}
void print()
{
printf("|----------|\n");
F(i,0,p-1)
{
F(j,0,p-1)
printf("%d ",x[i][j]);
printf("\n");
}
printf("|----------|\n");
}
}A,B,S,C,D; int main()
{
scanf("%d%d%d",&n,&m,&p); init();
S.init();S.x[0][0]=1;
int b=n,ans=0;
A.build0(); C.builde();
while (b)
{
if (b&1) C=C^A;
A=A^A;
b>>=1;
}
ans+=C.x[0][0];
A.build1(); C.builde(); b=n;
while (b)
{
if (b&1) C=C^A;
A=A^A;
b>>=1;
}
ans-=C.x[0][0];
printf("%d\n",(ans%md+md)%md);
}
BZOJ 4818 [Sdoi2017]序列计数 ——矩阵乘法的更多相关文章
- bzoj 4818: [Sdoi2017]序列计数【容斥原理+dp+矩阵乘法】
被空间卡的好惨啊---- 参考:http://blog.csdn.net/coldef/article/details/70305596 容斥,\( ans=ans_{没有限制}-ans{没有质数} ...
- 【bzoj4818】[Sdoi2017]序列计数 矩阵乘法
原文地址:http://www.cnblogs.com/GXZlegend/p/6825132.html 题目描述 Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的 ...
- BZOJ.4818.[SDOI2017]序列计数(DP 快速幂)
BZOJ 洛谷 竟然水过了一道SDOI!(虽然就是很水...) 首先暴力DP,\(f[i][j][0/1]\)表示当前是第\(i\)个数,所有数的和模\(P\)为\(j\),有没有出现过质数的方案数. ...
- BZOJ 4818 SDOI2017 序列计数
刚出炉的省选题,还是山东的. 自古山东出数学和网络流,堪称思维的殿堂,比某地数据结构成风好多了. 废话不说上题解. 1.题面 求:n个数(顺序可更改),值域为[1,m],和为p的倍数,且这些数里面有质 ...
- luogu 3702 [SDOI2017]序列计数 矩阵乘法+容斥
现在看来这道题真的不难啊~ 正着求不好求,那就反着求:答案=总-全不是质数 这里有一个细节要特判:1不是质数,所以在算全不是质数的时候要特判1 code: #include <bits/stdc ...
- 【BZOJ 4818】 4818: [Sdoi2017]序列计数 (矩阵乘法、容斥计数)
4818: [Sdoi2017]序列计数 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 560 Solved: 359 Description Al ...
- [BZOJ 4818/LuoguP3702][SDOI2017] 序列计数 (矩阵加速DP)
题面: 传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4818 Solution 看到这道题,我们不妨先考虑一下20分怎么搞 想到暴力,本蒟 ...
- [Sdoi2017]序列计数 [矩阵快速幂]
[Sdoi2017]序列计数 题意:长为\(n \le 10^9\)由不超过\(m \le 2 \cdot 10^7\)的正整数构成的和为\(t\le 100\)的倍数且至少有一个质数的序列个数 总- ...
- 【BZOJ4818】【SDOI2017】序列计数 [矩阵乘法][DP]
序列计数 Time Limit: 30 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description Alice想要得到一个长度为n的序 ...
随机推荐
- Kunernetes集群架构与组件
架构如图: master节点:主要是集群控制面板的功能,来管理整个集群,包括全局的角色,调度,都是在master节点进行控制 有三个组件: API Server: 是 k8s提供的一个统一入口,它是 ...
- 摘自 dd大牛的《背包九讲》
P01: 01背包问题 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 基本思路 这是最 ...
- 使用jquery.ajax实现省市的二级联动(SSH架构)
首先实现jquery ajax的二级联动 要下载个jquery.js 我在这里就不准备了 自行百度下载 背景介绍:通过部门的ID来查找部门下的所有班级 我实现二级联动的思路是:先查询所有部门 显示在页 ...
- 第四次作业:Windows各种基本应用的命令处理方法
删除文件夹命令? rd (remove directory) 如何给文件夹重新命名? ren (rename) 如何在文件夹中建立文件夹? md swift\a 如何用命令查看文本文件的内容? typ ...
- vscode的eslint插件不起作用
最近在用vue进行开发,但是vsCode中的eslint插件装上之后不起作用 1.vsCode打开“设置”,选择"settings.json" 2.输入一段脚本 "esl ...
- 使用 CFile 的子类 CStdioFile 的注意事项
目前为止只用到了 ReadString,也了解了一下 WriteString. 由于程序需要,本来程序中是用的CFile, 但是需要逐行读取文件数据,所以谷歌找到了 ReadString 类 —— 继 ...
- Voyager的Roles和Pemissions
以Page为例讲解: 取消admin的roles下Pages的Browse Pages权限: 打开web.php文件,添加: Route::get('pages', function(){ retur ...
- angular5自适应窗口大小
import {AfterViewInit, Directive, ElementRef, HostBinding, HostListener, Inject, Input, Renderer2} f ...
- python中的内建函数
本文用作记录python中的内建函数及其功能,本文内容随时补充. 完整的内建函数及其说明参考官方文档: https://docs.python.org/3.5/library/functions ...
- cf 1020 C
C. Elections time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...