博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51nod 1197 字符串的数量 V2(矩阵快速幂+数论?)
阅读量:4311 次
发布时间:2019-06-06

本文共 1223 字,大约阅读时间需要 4 分钟。

  接上一篇,那个递推式显然可以用矩阵快速幂优化...自己随便YY了下就出来了,学了一下怎么用LaTeX画公式,LaTeX真是个好东西!嘿嘿嘿

  

  如上图。(刚画错了一发。。。已更新

  然后就可以过V2了

  orz CZL卡常大师,我怎么越卡越慢啊QAQ

#include
#include
#include
#include
#include
#define ll long long using namespace std;const int maxn=1000010,mod=1e9+7;int n,m,k;int sum[maxn],v[maxn],g[22],f[22][maxn];void read(int &k){ int f=1;k=0;char c=getchar(); while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar(); while(c<='9'&&c>='0')k=k*10+c-'0',c=getchar(); k*=f;}int MOD(int x){
return x>=mod?x-mod:x;}int main(){ read(n);read(m);k=(int)floor(log(n)/log(2)+1); for(int i=1;i<=n;i++)f[1][i]=1,sum[i]=sum[i-1]+1; v[0]=1;g[1]=n-((n>>1)+1)+1; for(int i=2;i<=k;i++) { for(int j=1<<(i-1);j<=n;j++)f[i][j]=sum[j>>1]; for(int j=(n>>1)+1;j<=n;j++)g[i]=MOD(g[i]+f[i][j]); sum[(1<<(i-1))-1]=0;for(int j=1<<(i-1);j<=n;j++)sum[j]=MOD(sum[j-1]+f[i][j]); } for(int i=1;i<=m;i++) { for(int j=1;j<=min(i,k);j++) v[i]=MOD(v[i]+(1ll*g[j]*v[i-j]%mod)); } printf("%d\n",v[m]); return 0;}
View Code

转载于:https://www.cnblogs.com/Sakits/p/7404982.html

你可能感兴趣的文章
eclipse控制台不显示输出的解决办法
查看>>
Java中的TCP/UDP网络通信编程
查看>>
cordova学习:事件Events
查看>>
lincode167 - Add Two Numbers - easy
查看>>
大叔手记(3):Windows Silverlight/Phone7/Mango开发学习系列教程
查看>>
在Delphi中使用C++对象(转)
查看>>
mac 特殊符号的操作
查看>>
C++原创应用类库和工具类库
查看>>
FLOW CONTROL
查看>>
Maze迷宫问题(求最优解)
查看>>
mvc2 使用jquery.ajax发送数据以及显示数据
查看>>
【长期维护】C++休闲(修仙)躲方块小游戏
查看>>
Qt入门(15)——使用窗口部件
查看>>
Qt入门(16)——组装窗口部件
查看>>
raid卡MegaCli工具使用说明
查看>>
Trie树
查看>>
Mysql支持的数据类型(总结)
查看>>
对测试转开发的一些想法
查看>>
MVC文件上传08-使用客户端jQuery-File-Upload插件和服务端Backload组件让每个用户有专属文件夹...
查看>>
html模板中调用变量
查看>>