【51Nod算法马拉松18 B】非010串
来源:互联网 发布:淘宝销售宣传标语 编辑:程序博客网 时间:2024/05/17 07:21
Description
如果一个01字符串满足不存在010这样的子串,那么称它为非010串。
求长度为n的非010串的个数。(对1e9+7取模)
Solution
最喜欢签到题了。
设
然后在转成矩阵乘法就好了。
Code
#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int mo=1000000007;typedef long long ll;ll i,j,k,l,t,n,m;ll ans;typedef long long ll;struct ju{ ll a[16][16]; ju friend operator *(ju a,ju b){ ju c;memset(c.a,0,sizeof(c.a)); int i,j,k; fo(i,0,15){ fo(j,0,15){ fo(k,0,15){ c.a[i][j]=(c.a[i][j]+a.a[i][k]*b.a[k][j]%mo)%mo; } } } return c; }}a,b;ju qsm(ju x,ll y){ ju z; memset(z.a,0,sizeof(z.a));fo(i,0,15)z.a[i][i]=1; while(y){ if(y&1)z=z*x; x=x*x; y/=2; } return z;}int main(){ scanf("%lld",&n); if(n==1){ printf("2\n"); return 0; } a.a[0][0]=a.a[0][1]=1; a.a[1][3]=1; a.a[2][0]=a.a[2][1]=1; a.a[3][2]=a.a[3][3]=1; b.a[0][0]=b.a[0][1]=b.a[0][2]=b.a[0][3]=1; b=b*qsm(a,n-2); fo(i,0,3)(ans+=b.a[0][i])%=mo; printf("%lld\n",ans);}
2 0
- 【51Nod算法马拉松18 B】非010串
- 算法马拉松18-B-非010串
- 51Nod 算法马拉松7 B选数字
- 51nod 算法马拉松7 B.选数字
- 51NOD算法马拉松11 B君的竞技场
- 51nod算法马拉松19 B 最小集合
- [递推] 51nod 算法马拉松25 B. 完美序列
- [51nod]算法马拉松18 总结
- 51nod算法马拉松18总结
- 51nod 算法马拉松12
- 51nod算法马拉松20
- 51Nod 算法马拉松23
- 51Nod 算法马拉松24
- 51nod算法马拉松25
- 【51Nod算法马拉松18 A】染色问题
- 【51Nod算法马拉松18 C】数值计算
- 51NOD 算法马拉松15(脱欧专场) B君的游戏(博弈)
- 51NOD 1632 B君的连通(推公式)——算法马拉松16
- Xcode8上传应用包成功后,iTunes里不显示构建版本
- 移动端WebApp自适应实践
- 电路交换、报文交换和分组交换
- 将binaryproto文件转换为npy文件 代码
- 关于activity的直接传递数据【A向B传递数据】
- 【51Nod算法马拉松18 B】非010串
- 各种图片编码格式详解
- hihocode #1385 : A Simple Job
- 周末轻松一刻,欣赏完全由程序自己回忆的视频片段
- python学习之 requests库
- load-on-startup在web.xml中的含义
- 打造史上最简单的广告轮播图Banner
- 光束平差(Bundle Adjustment)算法
- Lowest Common Ancestor of a Binary Tree