【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,根据上面的 ...
随机推荐
- 使用 Nginx 和 Gunicorn 部署 Django 博客(转)
原文:http://zmrenwu.com/post/20/ http://www.siar.me/post/9/ 针对很多朋友反映按照教程的做法始终只能看到 Nginx 欢迎页面的问题,Tian ...
- 怎么使用 JavaScript 将网站后台的数据变化实时更新到前端
实时这个工作现在大体有两种方法一.前端不断地向后台轮询请求数据查询的接口(不管你是用AJAX还是什么)然后将返回的数据重绘在页面上,这以前端页面为主动的方式.二.如果浏览器支持Websocket 那么 ...
- 数据结构(三)串---KMP模式匹配算法实现及优化
KMP算法实现 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include ...
- bzoj千题计划188:bzoj1923: [Sdoi2010]外星千足虫 (高斯—若尔当消元法解异或方程组)
http://www.lydsy.com/JudgeOnline/problem.php?id=1923 #include<cstdio> #include<cstring> ...
- python学习笔记6--mockserver
一.mockserver的应用 有时候测试我们需要调用一些三方接口或者未开发完成的接口,完成我们的业务流程测试,但是这时候可能我们只知道接口返回值,接口并没有完全开发完成或可以让我们任意调用,这时候就 ...
- [转载]VS2013 密钥 – 所有版本
http://www.wxzzz.com/307.html Visual Studio Ultimate 2013 KEY(密钥):BWG7X-J98B3-W34RT-33B3R-JVYW9 Visu ...
- 阿里云Linux服务器挂载数据盘
步骤1.登录服务器2.检查磁盘信息 命令:fdisk -l3.磁盘分区 命令:fdisk /dev/xvdb 查看命令帮助 m n //新增一个分区 p //建立一个主分区 1 //设置盘符为1 回车 ...
- 第8月第12天 python json.dumps danmu
1.json.dumps return JsonResponse({ 'status': WechatMessage.POST_METHOD_REQUIRED[1], 'status_code': W ...
- 记关于vue-cli3 本地代理模拟数据的实践
网上说的基本都是使用express或http-server作为服务器或其它什么东西自己把玩php也有些年头,就用php好了 服务环境 apache,php先配置好隐藏php后缀扩展名: 在httpd. ...
- HDU 6395 Sequence 杜教板子题
题目意思非常明确,就是叫你求第n项,据我们学校一个大佬说他推出了矩阵,但是我是菜鸡,那么肯定是用简单的方法水过啦!我们先p^(1/2)的复杂度处理出i=[i,p]范围内的所有种类的(int)(p/i) ...