Description

题目链接

Solution

容斥原理,答案为忽略质数限制的方案数减去不含质数的方案数

然后矩阵乘法优化一下DP即可

Code

  1. #include <cstdio>
  2. #include <algorithm>
  3. #include <cstring>
  4. #define N 120
  5. using namespace std;
  6. const int MOD=20170408;
  7. int n,m,p,pri[2000010],cnt[N],top;
  8. bool vis[20000010];
  9. struct info{
  10. int A[N][N];
  11. info(){for(int i=0;i<p;++i)for(int j=0;j<p;++j)A[i][j]=0;}
  12. int *operator [](int x){return A[x];}
  13. friend info operator *(info a,info b){
  14. info c;
  15. for(int i=0;i<p;++i)
  16. for(int j=0;j<p;++j)
  17. for(int k=0;k<p;++k)
  18. c[i][j]=(c[i][j]*1ll+1ll*a[i][k]*b[k][j]%MOD)%MOD;
  19. return c;
  20. }
  21. }t1,t2,g;
  22. inline info Pow(info A,int c){
  23. info res;
  24. for(int i=0;i<p;++i) res[i][i]=1;
  25. for(;c;c>>=1,A=A*A) if(c&1) res=res*A;
  26. return res;
  27. }
  28. int main(){
  29. scanf("%d%d%d",&n,&m,&p);
  30. vis[1]=1;
  31. for (int i=2;i<=m;i++){
  32. if (!vis[i])pri[++top]=i;
  33. for (int j=1;j<=top&&i*1ll*pri[j]<=m;j++){
  34. vis[i*pri[j]]=1;
  35. if(i%pri[j]==0)break;
  36. }
  37. }
  38. for(int i=1;i<=m;++i) cnt[i%p]++;
  39. for(int i=0;i<p;++i)for(int j=0;j<p;++j)g[i][j]=cnt[(i-j+p)%p];
  40. t1[0][0]=t2[0][0]=1;
  41. t1=t1*Pow(g,n);
  42. memset(cnt,0,sizeof(cnt));
  43. for(int i=1;i<=m;++i) if(vis[i]) cnt[i%p]++;
  44. for(int i=0;i<p;++i)for(int j=0;j<p;++j)g[i][j]=cnt[(i-j+p)%p];
  45. t2=t2*Pow(g,n);
  46. printf("%d\n",(t1[0][0]-t2[0][0]+MOD)%MOD);
  47. return 0;
  48. }

[Bzoj4818]序列计数(矩阵乘法+DP)的更多相关文章

  1. 【BZOJ4818】【SDOI2017】序列计数 [矩阵乘法][DP]

    序列计数 Time Limit: 30 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description Alice想要得到一个长度为n的序 ...

  2. 【bzoj4818】[Sdoi2017]序列计数 矩阵乘法

    原文地址:http://www.cnblogs.com/GXZlegend/p/6825132.html 题目描述 Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的 ...

  3. [BZOJ 4818/LuoguP3702][SDOI2017] 序列计数 (矩阵加速DP)

    题面: 传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4818 Solution 看到这道题,我们不妨先考虑一下20分怎么搞 想到暴力,本蒟 ...

  4. [Sdoi2017]序列计数 矩阵优化dp

    题目 https://www.lydsy.com/JudgeOnline/problem.php?id=4818 思路 先考虑没有质数限制 dp是在同余系下的,所以\(f[i][j]\)表示前i个点, ...

  5. BZOJ 4818 [Sdoi2017]序列计数 ——矩阵乘法

    发现转移矩阵是一个循环矩阵. 然后循环矩阵乘以循环矩阵还是循环矩阵. 据说还有FFT并且更优的做法. 之后再看吧 #include <map> #include <cmath> ...

  6. luogu 3702 [SDOI2017]序列计数 矩阵乘法+容斥

    现在看来这道题真的不难啊~ 正着求不好求,那就反着求:答案=总-全不是质数 这里有一个细节要特判:1不是质数,所以在算全不是质数的时候要特判1 code: #include <bits/stdc ...

  7. Codevs 1305 Freda的道路(矩阵乘法 DP优化)

    1305 Freda的道路 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description Freda要到Rainbow的城堡去玩了.我们可以认 ...

  8. bzoj 4818: [Sdoi2017]序列计数【容斥原理+dp+矩阵乘法】

    被空间卡的好惨啊---- 参考:http://blog.csdn.net/coldef/article/details/70305596 容斥,\( ans=ans_{没有限制}-ans{没有质数} ...

  9. Luogu3702 SDOI2017 序列计数 矩阵DP

    传送门 不考虑质数的条件,可以考虑到一个很明显的$DP:$设$f_{i,j}$表示选$i$个数,和$mod\ p=j$的方案数,显然是可以矩阵优化$DP$的. 而且转移矩阵是循环矩阵,所以可以只用第一 ...

随机推荐

  1. python随笔--根据号码查询归属地

    给定一组(串)数据,根据输入得号码,查询归属地 def num_info(num): info0 = """5583|1860100|010|北京市|北京联通GSM卡 5 ...

  2. JavaScript流程语句

    循环语句 while 语法 while(条件表达式){ 循环执行代码段 } 流程 1.判断条件表达式的值 2.当值为true时,循环执行代码段 3.当值为false时退出循环体 特性 先检查条件,再执 ...

  3. 数据批量删除_从页面js到后台数据库

    LayUI   批量选择的 ,然后操作 batchdel: function () { var checkStatus = table.checkStatus('LAY-gridview') , ch ...

  4. php-fpm如何优化进程数

    参考链接: php-fpm进程数优化

  5. OpenCV视觉库

    视频会议软件的视频质量除了与外置设备.编码器相关外,还与视频的后处理技术相关,视频图像通过后处理技术,如图像增强.图像去噪等,图像质量会得到主观上较大的提高.而我们通常的视频后处理技术会采用开源的项目 ...

  6. now()与sysdate()的区别(1)

        now()与sysdate()两个函数都以'YYYY-MM-DD HH:MM:SS'的形式表示表示当前的时间.比如: root@rac1 21:13:10> select sysdate ...

  7. UVA-674 Coin Change---完全背包

    题目链接: https://vjudge.net/problem/UVA-674 题目大意: 有5种硬币, 面值分别为1.5.10.25.50,现在给出金额,问可以用多少种方式组成该面值. 思路: 每 ...

  8. 【BZOJ3622】已经没有什么好害怕的了(动态规划+广义容斥)

    点此看题面 大致题意: 有\(n\)个糖果和\(n\)个药片,各有自己的能量.将其两两配对,求糖果比药片能量大的组数恰好比药片比糖果能量大的组数多\(k\)组的方案数. 什么是广义容斥(二项式反演) ...

  9. Vuex基础-Getter

    官方地址:https://vuex.vuejs.org/zh/guide/getters.html Vuex 允许我们在 store 中定义“getter”(可以认为是 store 的计算属性).就像 ...

  10. 【PC-x86-x64】JDK 32bit与64bit的区别及x64 PC的发展历程【转】

    一次偶然分析的机会: 在进行Minecraft也就是所谓的我的世界游戏的时候,在对局域网进行开放的时候,我的是64bit的JDK,而我同学的是32bit的JDK,所以在进行局域网链接的时候就会出现In ...