【BZOJ 4818】 4818: [Sdoi2017]序列计数 (矩阵乘法、容斥计数)
4818: [Sdoi2017]序列计数
Time Limit: 30 Sec Memory Limit: 128 MB
Submit: 560 Solved: 359Description
Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数。Alice还希望,这n个数中,至少有一个数是质数。Alice想知道,有多少个序列满足她的要求。Input
一行三个数,n,m,p。1<=n<=10^9,1<=m<=2×10^7,1<=p<=100Output
一行一个数,满足Alice的要求的序列数量,答案对20170408取模。Sample Input
3 5 3Sample Output
33HINT
Source
【分析】
f[i][j]表示填i个数,mod为j的方案数。
这个转移可以用矩阵加速啦,那么n很大也没关系了。
然后要至少有一个质数,就用总方案数-没有一个质数。
然后一开始跑20s,看到别人2s,然后觉得这个循环矩阵的矩阵乘法可以O(n^2),改了就2s了。。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define LL long long
#define Maxn 20000010
#define Mod 20170408 int pri[Maxn],pl;
bool vis[Maxn]; void init(int n)
{
for(int i=;i<=n;i++) vis[i]=;
pl=;vis[]=;
for(int i=;i<=n;i++)
{
if(!vis[i]) pri[++pl]=i;
for(int j=;j<=pl;j++)
{
if(pri[j]*i>n) break;
vis[i*pri[j]]=;
if(i%pri[j]==) break;
}
}
} int sm[],p; struct Matrix
{
int w[][];
Matrix() {memset(w,,sizeof(w));}
friend Matrix operator * (Matrix x,Matrix y)
{
Matrix ret;
for(int k=;k<p;k++)
{
// for(int i=0;i<p;i++)
for(int j=;j<p;j++)
{
ret.w[][j]=(ret.w[][j]+1LL*x.w[][k]*y.w[k][j]%Mod)%Mod;
}
}
for(int i=;i<p;i++)
{
for(int j=;j<p;j++) ret.w[i][(j+i)%p]=ret.w[][j];
}
return ret;
}
friend Matrix operator ^ (Matrix x,int b)
{
Matrix ret;
for(int i=;i<p;i++) ret.w[i][i]=;
while(b)
{
if(b&) ret=ret*x;
x=x*x;
b>>=;
}
return ret;
}
}; int main()
{
int n,m;
scanf("%d%d%d",&n,&m,&p);
init(m);
for(int i=;i<p;i++) sm[p]=;
Matrix nw;
for(int i=;i<=m;i++) sm[i%p]++;
for(int i=;i<p;i++) for(int j=;j<p;j++) (nw.w[i][(i+j)%p]+=sm[j])%Mod;
nw=nw^n;
int ans=nw.w[][]; for(int i=;i<=m;i++) if(!vis[i]) sm[i%p]--;
memset(nw.w,,sizeof(nw.w));
for(int i=;i<p;i++) for(int j=;j<p;j++) (nw.w[i][(i+j)%p]+=sm[j])%Mod;
nw=nw^n;
ans=((ans-nw.w[][])%Mod+Mod)%Mod; printf("%d\n",ans);
return ;
}
2017-04-28 10:51:39
【BZOJ 4818】 4818: [Sdoi2017]序列计数 (矩阵乘法、容斥计数)的更多相关文章
- luogu 3702 [SDOI2017]序列计数 矩阵乘法+容斥
现在看来这道题真的不难啊~ 正着求不好求,那就反着求:答案=总-全不是质数 这里有一个细节要特判:1不是质数,所以在算全不是质数的时候要特判1 code: #include <bits/stdc ...
- [BZOJ 4818/LuoguP3702][SDOI2017] 序列计数 (矩阵加速DP)
题面: 传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4818 Solution 看到这道题,我们不妨先考虑一下20分怎么搞 想到暴力,本蒟 ...
- 【BZOJ4818】【SDOI2017】序列计数 [矩阵乘法][DP]
序列计数 Time Limit: 30 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description Alice想要得到一个长度为n的序 ...
- 【bzoj4818】[Sdoi2017]序列计数 矩阵乘法
原文地址:http://www.cnblogs.com/GXZlegend/p/6825132.html 题目描述 Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的 ...
- [BZOJ 2326] [HNOI2011] 数学作业 【矩阵乘法】
题目链接:BZOJ - 2326 题目分析 数据范围达到了 10^18 ,显然需要矩阵乘法了! 可以发现,向数字尾部添加一个数字 x 的过程就是 Num = Num * 10^k + x .其中 k ...
- bzoj 1875: [SDOI2009]HH去散步 -- 矩阵乘法
1875: [SDOI2009]HH去散步 Time Limit: 20 Sec Memory Limit: 64 MB Description HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走, ...
- bzoj 2553: [BeiJing2011]禁忌 AC自动机+矩阵乘法
题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=2553 题解: 利用AC自动机的dp求出所有的转移 然后将所有的转移储存到矩阵中,进行矩阵 ...
- BZOJ 4870 [Shoi2017]组合数问题 ——动态规划 矩阵乘法
注意到$r<k$ 别问我为什么要强调. 考场上前30分水水. 然后写阶乘的时候大力$n\log {n}$预处理 本机跑的挺快的,然后稳稳的T掉了. 然后就是简单的矩阵乘法了. #include ...
- bzoj 3329: Xorequ【数位dp+矩阵乘法】
注意第一问不取模!!! 因为a+b=a|b+a&b,a^b=a|b-a&b,所以a+b=a^b+2(a&b) x^3x==2x可根据异或的性质以转成x^2x==3x,根据上面的 ...
随机推荐
- Java基础-反射(reflect)技术详解
Java基础-反射(reflect)技术详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.类加载器 1>.JVM 类加载机制 如下图所示,JVM类加载机制分为五个部分 ...
- MySQL的DML常用语法格式
MySQL的DML常用语法格式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们知道MySQL的查询大致分为单表查询,多表查询以及联合查询.多表查询,顾名思义,就是查询的结果可能 ...
- OpenGL ES 2.0 Shader 调试新思路(二): 做一个可用的原型
OpenGL ES 2.0 Shader 调试新思路(二): 做一个可用的原型 目录 背景介绍 请参考前文OpenGL ES 2.0 Shader 调试新思路(一): 改变提问方式 优化 ledCha ...
- Carmichael Numbers (Uva No.10006) -- 快速幂运算_埃氏筛法_打表
#include <cstdio> #include <iostream> #include <algorithm> #include <cmath> ...
- 贪心算法:Codevs 1044 拦截导弹
---恢复内容开始--- #include <iostream> #include <cstdio> #include <cstdlib> #include < ...
- '增量赋值(augmented assignment)', 多么痛的领悟!
'增量赋值(augmented assignment)', 多么痛的领悟! 深刻理解x += a 与 x = x + a 的不同: 按理说上面的两条语句是等价的, 功能上完全一样的. 之所以说不同, ...
- PHP5.6 和PHP7.0区别
1. PHP7.0 比PHP5.6性能提升了两倍. 2.PHP7.0全面一致支持64位. 3.PHP7.0之前出现的致命错误,都改成了抛出异常. 4.增加了空结合操作符(??).效果相当于三元运算符. ...
- GaN助力运营商和基站OEM实现5G sub-6GHz和mmWave大规模MIMO
到2021年,估计全球会有更多的人拥有移动电话(55亿),将超过用上自来水的人数(53亿).与此同时,带宽紧张的视频应用将进一步增加对移动网络的需求,其会占移动流量的78%.使用大规模多输入多输出(M ...
- pymongo创建索引
from database import db db_list = ["table1", "table2", "table3", " ...
- MongoDB之pymongo
PyMongo是什么 PyMongo是驱动程序,使python程序能够使用Mongodb数据库,使用python编写而成. 安装 环境:Ubuntu 14.04+python2.7+MongoDB 2 ...