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还希 ...
随机推荐
- Codeforces 659E New Reform【DFS】
题目链接: http://codeforces.com/problemset/problem/659/E 题意: 给定n个点和m条双向边,将双向边改为单向边,问无法到达的顶点最少有多少个? 分析: 无 ...
- Codeforces 549C(博弈)
C. The Game Of Parity time limit per test 1 second memory limit per test 256 megabytes input standar ...
- PAT (Advanced Level) 1038. Recover the Smallest Number (30)
注意前导零的消去. #include <iostream> #include <string> #include <sstream> #include <al ...
- Meteor事件
使用事件是非常简单的.我们将学习如何使用tag,class 和id作为事件选择器. 让我们创建HTML模板三大要素.第一个是 p 标签,第二个是 myClass 类,最后一个是myId. meteor ...
- 【转载】同步和互斥的POSIX支持(互斥锁,条件变量,自旋锁)
上篇文章也蛮好,线程同步之条件变量与互斥锁的结合: http://www.cnblogs.com/charlesblc/p/6143397.html 现在有这篇文章: http://blog.cs ...
- Centos5.11 //IP/phpmyadmin 远程无法登入
异地登入phpmyadmin时,会出现"You don't have permission to access /phpmyadmin/ on this server."这是因为配 ...
- 分享一个检测用户是否用手机(Mobile)访问网站的 PHP 类
有一个基于MIT License协议开源的PHP程序 http://code.google.com/p/php-mobile-detect/ 程序就是一个文件,下载之后直接引用就可以. 使用方法: & ...
- 打造极致性能数据库中间件丨LVS+Keepalive+华为云DDM之理论篇
背景说明 华为云分布式数据库中间件(Distributed Database Middleware,简称DDM),专注于解决数据库分布式扩展问题,突破了传统数据库的容量和性能瓶颈,实现海量数据高并发访 ...
- [概念理解] UML类建模
Class Diagram Figure 4.30 Elements of the class diagram 关联,多重性: 聚合aggregation. In class diagrams, as ...
- 一个程序员对微信小程序的看法
我们公司用两周的时间开发了一款微信小程序,叫<如e支付>,大家可以去体验一下.由于接口都是写好的,所以开发起来很快.我将从4个不同的角度来介绍我对微信小程序的理解. 1.技术的角度 ...