链接:https://www.luogu.org/problemnew/show/P3702

题解:

碰到计数题都要想想容斥

就跟碰到最大值最小要想想二分一样

考虑没有一个数是质数

那就确定了每一个数的取值范围

那么dp方程很显然

然后构造矩阵来优化转移

可以发现每个决策时一样的 所以矩阵可以一列一列的复制

  1. #include <bits/stdc++.h>
  2. #pragma comment(linker,"/STACK:102400000,102400000")
  3. #pragma G++ optimize (“O2”)
  4. using namespace std;
  5. #define ll long long
  6. const ll maxn= 2e7+;
  7. #define mo 20170408
  8. ll k,n,m;
  9. bool f[maxn+];
  10. struct re{
  11. ll jz1[][],jz2[][];
  12. }a;
  13. re tmp,c;
  14. re XX(re x,re y)
  15. {
  16. memset(tmp.jz1,,sizeof(tmp.jz1));
  17. memset(tmp.jz2,,sizeof(tmp.jz2));
  18. for (ll i=;i<k;i++)
  19. for (ll j=;j<k;j++)
  20. for (ll p=;p<k;p++)
  21. {
  22. tmp.jz1[i][p]=(tmp.jz1[i][p]+x.jz1[i][j]*y.jz1[j][p])%mo;
  23. tmp.jz2[i][p]=(tmp.jz2[i][p]+x.jz2[i][j]*y.jz2[j][p])%mo;
  24. }
  25. return(tmp);
  26. }
  27. re fastpow(ll x)
  28. {
  29. cout<<x<<endl;
  30. if (x==) return(a);
  31. c=fastpow(x/);
  32. c=XX(c,c);
  33. if (x%) c=XX(c,a);
  34. return c;
  35. }
  36. int main()
  37. {
  38. freopen("noip.in","r",stdin);
  39. freopen("noip.out","w",stdout);
  40. cin>>n>>m>>k;
  41. memset(f,,sizeof(f));
  42. f[]=f[]=;
  43. for (ll i=;i<=maxn;i++)
  44. if (f[i])
  45. {
  46. ll j=;
  47. while (j*i<=maxn)
  48. {
  49. f[j*i]=; j++;
  50. }
  51. }
  52. for (ll i=;i<=m;i++)
  53. if (!f[i])
  54. {
  55. a.jz1[((-i%k)+k)%k][]++;
  56. }
  57. for (ll i=;i<k;i++)
  58. {
  59. for (ll j=;j<k;j++)
  60. a.jz1[j][i]=a.jz1[j-][i-];
  61. a.jz1[][i]=a.jz1[k-][i-];
  62. }
  63. for (ll i=;i<=m;i++)
  64. a.jz2[((-i%k)+k)%k][]++;
  65. for (ll i=;i<k;i++)
  66. {
  67. for (ll j=;j<k;j++)
  68. a.jz2[j][i]=a.jz2[j-][i-];
  69. a.jz2[][i]=a.jz2[k-][i-];
  70. }
  71. re d=fastpow(n);
  72. cout<<(d.jz2[][]-d.jz1[][]+mo)%mo;
  73. return ;
  74. }

sdoi<序列计数>的更多相关文章

  1. BZOJ4818 序列计数

    4818: [Sdoi2017]序列计数 Time Limit: 30 Sec  Memory Limit: 128 MB Description Alice想要得到一个长度为n的序列,序列中的数都是 ...

  2. [Sdoi2017]序列计数 [矩阵快速幂]

    [Sdoi2017]序列计数 题意:长为\(n \le 10^9\)由不超过\(m \le 2 \cdot 10^7\)的正整数构成的和为\(t\le 100\)的倍数且至少有一个质数的序列个数 总- ...

  3. BZOJ_4818_[Sdoi2017]序列计数_矩阵乘法

    BZOJ_4818_[Sdoi2017]序列计数_矩阵乘法 Description Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数.Alice还希望 ...

  4. HDU 6348 序列计数 (树状数组 + DP)

    序列计数 Time Limit: 4500/4000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Subm ...

  5. luogu3702-[SDOI2017]序列计数

    Description Alice想要得到一个长度为nn的序列,序列中的数都是不超过mm的正整数,而且这nn个数的和是pp的倍数. Alice还希望,这nn个数中,至少有一个数是质数. Alice想知 ...

  6. 【BZOJ 4818】 4818: [Sdoi2017]序列计数 (矩阵乘法、容斥计数)

    4818: [Sdoi2017]序列计数 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 560  Solved: 359 Description Al ...

  7. P3702 [SDOI2017]序列计数

    P3702 [SDOI2017]序列计数 链接 分析: 首先可以容斥掉,用总的减去一个质数也没有的. 然后可以dp了,f[i][j]表示到第i个数,和在模p下是j的方案数,矩阵快速幂即可. 另一种方法 ...

  8. 【BZOJ4818】[Sdoi2017]序列计数 DP+矩阵乘法

    [BZOJ4818][Sdoi2017]序列计数 Description Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数.Alice还希望 ,这n个数 ...

  9. BZOJ4818 LOJ2002 SDOI2017 序列计数 【矩阵快速幂优化DP】*

    BZOJ4818 LOJ2002 SDOI2017 序列计数 Description Alice想要得到一个长度为n的序列,序列中的数都是不超过m的正整数,而且这n个数的和是p的倍数. Alice还希 ...

随机推荐

  1. MongoDB 时差问题问题

    在读取的时候,需要再次转换回来,比较麻烦. 其实,Mongo本身就已经提供了相应的处理方法,即在实体类中加个属性即可.具体如下: [BsonDateTimeOptions(Kind = DateTim ...

  2. 出售爱奇艺 tx好莱坞 优酷 乐视 芒果 搜狐 等一个月会员激活码

    出售爱奇艺 tx好莱坞 优酷 乐视 芒果  搜狐 等一个月会员激活码  进群价格有优惠  QQ群:569333649

  3. ettercap插件介绍

    利用sslstrip和ettercap突破ssl嗅探密码 ettercap之DNS欺骗--结合metasploit使用 ettercap支持在运行时加载模块.它们会自动地编译你的系统是否支持他们或者直 ...

  4. BZOJ3527 [Zjoi2014]力 【fft】

    题目 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. 输入格式 第一行一个整数n. 接下来n行每行输入一个数,第i行表示qi. 输出格式 n行,第i行输出Ei.与标准答案误差不超过 ...

  5. C++中模板的使用

    为什么使用模板: C++重载(overloading),重载函数一般含有不同的参数个数或不同的参数类型.如果使用MAX函数对不同类型的求最大值,就要定义不同的重载函数: int max(int x,i ...

  6. 第16月第10天 poco target

    1. void TCPServer::start() { poco_assert (_stopped); _stopped = false; _thread.start(*this); } void ...

  7. POJ 1035 Spell checker (模拟)

    题目链接 Description You, as a member of a development team for a new spell checking program, are to wri ...

  8. R 的农场 chebnear (二分答案+最近平面点对)

    题面 \(solution:\) 这道题想到二分答案应该是不难的,因为题目是求平均工资的最小值,这个显然具备单调性: 我们设平均工资的最小值为ans,如果我们现在的平均工资x小于ans那么将x带入题目 ...

  9. _vimrc(VimScript脚本语言学习)

    Windows下 syntax on "高亮 "缩进 set cindent "set cin set smartindent "set si set auto ...

  10. ASP.NET MVC + EF 更新的几种方式(超赞)

    1.常用 db.Entry(实体).State = EntityState.Modified;db.SaveChanges(); 2.指定更新 db.Configuration.ValidateOnS ...