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的序 ...
随机推荐
- self & this 上下文
对象:指向对象的首地址: 函数:代表了函数运行的主要上下文: 内部:在类的内部使用. self Within the body of a class method, self refers to th ...
- 摘自 dd大牛的《背包九讲》
P01: 01背包问题 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 基本思路 这是最 ...
- ubuntu下安装eclipse<转>
转载自http://my.oschina.net/u/1407116/blog/227084 http://my.oschina.net/u/1407116/blog/227087 一 JD ...
- 爬虫2_python2
# -*- coding: UTF-8 -*- # 正则表达式模块 import re # 获取路径模块 import urllib #时间模块 import time def getHtml(url ...
- Bootstrap历练实例:可取消的警告
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- windows系统下的两个批处理命令
启动应用:***.exe 关闭应用:taskkill /f /im ***.exe 保存为.bat文件
- QQ 发送邮件
之前也发布过一篇QQ发邮件的,后来那种方法在阿里云服务器中报错了,查了好久才发现,是阿里云的服务器把 25 端口 给封杀了.现在重新做了个功能. public static string UserNa ...
- 如何挂载一个镜像文件(how to mount an image file)
如何挂载一个镜像文件(how to mount an image file) 08/16/2012master 4 Comments 在使用KVM或Xen虚拟化的情况下,经常需要使用镜像文件(imag ...
- 学习笔记(四): Representation:Feature Engineering/Qualities of Good Features/Cleaning Data/Feature Sets
目录 Representation Feature Engineering Mapping Raw Data to Features Mapping numeric values Mapping ca ...
- nginx下配置laravel+rewrite重写
server { listen ; server_name ha.d51v.cn; #access_log /data/wwwlogs/access_nginx.log combined; root ...