bzoj 4818: [Sdoi2017]序列计数【容斥原理+dp+矩阵乘法】
被空间卡的好惨啊————
参考:http://blog.csdn.net/coldef/article/details/70305596
容斥,\( ans=ans_{没有限制}-ans{没有质数} \)
动规递推式,\( f[i][j]=\sum_{k=0}^{p-1}f[i-1][k]*cnt[(i-j+p)%p] \),\( cnt[i] \)表示\( %p==i \)的数,注意计算第二个\( ans \)的时候要用筛子去掉质数
因为\( n\leq 10^9 \),所以选择矩阵乘法加速递推式。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const long long P=105,N=20000005,mod=20170408;
long long n,m,p,cnt[P],q[1280000];
bool v[N];
struct qwe
{
long long a[P][P];
qwe operator * (qwe b)
{
qwe c;
for(long long i=0;i<p;i++)
for(long long j=0;j<p;j++)
{
c.a[i][j]=0;
for(long long k=0;k<p;k++)
c.a[i][j]=(c.a[i][j]+a[i][k]*b.a[k][j]%mod)%mod;
}
return c;
}
}f1,f2,g;
qwe ksm(qwe a,long long b)
{
qwe r;
for(long long i=0;i<p;i++)
r.a[i][i]=1;
while(b)
{
if(b&1)
r=r*a;
a=a*a;
b>>=1;
}
return r;
}
int main()
{
scanf("%lld%lld%lld",&n,&m,&p);
for(long long i=1;i<=m;i++)
cnt[i%p]++;
for(long long i=0;i<p;i++)
for(long long j=0;j<p;j++)
g.a[i][j]=cnt[(i-j+p)%p];
f1.a[0][0]=f2.a[0][0]=1;
f1=f1*ksm(g,n);
v[1]=1;
for(long long i=2;i<=m;i++)
{
if(!v[i])
q[++q[0]]=i;
for(long long j=1;j<=q[0]&&i*q[j]<=m;j++)
{
v[i*q[j]]=1;
if(i%q[j]==0)
break;
}
}
memset(cnt,0,sizeof(cnt));
for(long long i=1;i<=m;i++)
if(v[i])
cnt[i%p]++;//,cout<<i<<endl;;
for(long long i=0;i<p;i++)
for(long long j=0;j<p;j++)
g.a[i][j]=cnt[(i-j+p)%p];
f2=f2*ksm(g,n);//cout<<f1.a[0][0]<<" "<<f2.a[0][0]<<endl;
printf("%lld\n",(f1.a[0][0]-f2.a[0][0]+mod)%mod);
return 0;
}
bzoj 4818: [Sdoi2017]序列计数【容斥原理+dp+矩阵乘法】的更多相关文章
- BZOJ.4818.[SDOI2017]序列计数(DP 快速幂)
BZOJ 洛谷 竟然水过了一道SDOI!(虽然就是很水...) 首先暴力DP,\(f[i][j][0/1]\)表示当前是第\(i\)个数,所有数的和模\(P\)为\(j\),有没有出现过质数的方案数. ...
- BZOJ 4818 [Sdoi2017]序列计数 ——矩阵乘法
发现转移矩阵是一个循环矩阵. 然后循环矩阵乘以循环矩阵还是循环矩阵. 据说还有FFT并且更优的做法. 之后再看吧 #include <map> #include <cmath> ...
- BZOJ 4818 SDOI2017 序列计数
刚出炉的省选题,还是山东的. 自古山东出数学和网络流,堪称思维的殿堂,比某地数据结构成风好多了. 废话不说上题解. 1.题面 求:n个数(顺序可更改),值域为[1,m],和为p的倍数,且这些数里面有质 ...
- 【BZOJ 4818】 4818: [Sdoi2017]序列计数 (矩阵乘法、容斥计数)
4818: [Sdoi2017]序列计数 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 560 Solved: 359 Description Al ...
- BZOJ.1875.[SDOI2009]HH去散步(DP 矩阵乘法)
题目链接 比较容易想到用f[i][j]表示走了i步后到达j点的方案数,但是题目要求不能走上一条走过的边 如果这样表示是不好转移的 可以考虑边,f[i][j]表示走了i步后到达第j条边的方案数,那么有 ...
- [BZOJ4818][SDOI2017]序列计数(动规+快速幂)
4818: [Sdoi2017]序列计数 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 972 Solved: 581[Submit][Status ...
- [BZOJ 4818/LuoguP3702][SDOI2017] 序列计数 (矩阵加速DP)
题面: 传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4818 Solution 看到这道题,我们不妨先考虑一下20分怎么搞 想到暴力,本蒟 ...
- 【BZOJ4818】[Sdoi2017]序列计数 DP+矩阵乘法
[BZOJ4818][Sdoi2017]序列计数 Description Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数.Alice还希望 ,这n个数 ...
- BZOJ4818 LOJ2002 SDOI2017 序列计数 【矩阵快速幂优化DP】*
BZOJ4818 LOJ2002 SDOI2017 序列计数 Description Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数. Alice还希 ...
随机推荐
- HDU1533 最小费用最大流
Going Home Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- Spring4 基本使用
前言 虽然现在基本上是 springboot 的天下了,但是传统的 spring4 在广大的软件企业中仍然占据很大比例.一上手能用,但是要让我从无到有搭一个spring4的开发环境出来,可能会磕磕碰碰 ...
- 【OPPO主题制作系列 - 01】-- 写个小工具自动打包Theme文件
参考OPPO主题设计师站: http://dev.theme.oppomobile.com/user/user_start 想要打包成Theme文件,必须把需要打包的文件夹拖到oppo-themepa ...
- Java 函数式接口 lambda
import java.io.Serializable; import java.util.ArrayList; import java.util.List; public class Demo1 { ...
- Hexo搭建个人blog
Hexo搭建 现在只想说心累... 前几天看了几个牛人的blog,感觉他们的风格很舒服,然后就发现了Hexo这个好东西!激动的想马上自己也弄一个,昨天晚上开始看资料特别是:潘柏信写了两篇 HEXO搭建 ...
- Android c/c++ 应用向linux 平台迁移执行
鉴于近期在minicamera (linux + FPGA) 平台上模拟 安卓系统camera流程遭遇不断升级同步的困扰.尤其是 不开放源代码后 , 应用要链接封闭动态库造成的困难.以及在sprdis ...
- 深入浅出AOP(一)
动态代理实现AOP: AOP事实上非常早之前依照做出来了一些东西,之所以不敢说做出来了.是由于它是什么?怎么实现?做出来的东西是不是?先前一直查资料.查到的资料跟着做.到后来发现,AOP越来越大,而非 ...
- soapUI系列之—-07 调用JIRA Rest API接口【例】
一.调用JIRA接口------实现过滤器搜索问题 1. 在SoapUI中新建 REST Project, 在URI 中输入登录接口的 url (任意一个 Rest 接口的 url 都可以): 2. ...
- 分享一个基于Bootstrap的 ACE框架 入门(MVC+EF)
基于Bootstrap3,拥有强大的功能组件以及UI组件,基本能满足后台管理系统的需求, 而且能根据不同设备适配显示,而且还有四个主题可以切换. 简单入门,源代码下载:https://github.c ...
- Android自带的分享功能案例
MainActivity的代码 package com.hpsvse.weiboshare; import java.io.File; import android.net.Uri; import a ...