51nod 算法马拉松18 B 非010串 矩阵快速幂
非010串
一个数n,表示长度。(n<1e15)
长度为n的非010串的个数。(对1e9+7取模)
3
7解释: 000 001 011 100 101 110 111
读完题,这样的题目肯定是能找到规律所在的,要不然数据太大根本无法算。假设现在给的长度是n,答案为f(n),那么假设最后一位是0,前面有010的可能就有f(n-1)种,同样假设最后一位是1,前面有010的可能就也有f(n-1),而这样排除的话还存在着一个问题,就是最后为0的时候可能会出现前面是01而构成010,这样就加重复了。所以假设前一位为1,再减去f(n-2),当然还可能前面是11而构成110而不是010,所以还要把多减的再加回来,即再加上一个f(n-3),这样一来就可以推出一个公式,f(n)=2*f(n-1)-f(n-2)+f(n-3)。看到这个公式,数据有那么大,所以我们用矩阵快速幂来进行处理就可以快速得出结果了。
下面是AC代码:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std;const long long mod=1000000007;struct matrix {long long a[3][3]; };matrix cal(matrix A,matrix B) {int i,j,k;matrix C;for(i=0;i<3;i++){for(j=0;j<3;j++){C.a[i][j]=0;for(k=0;k<3;k++){C.a[i][j]=(C.a[i][j]+(A.a[i][k]*B.a[k][j])%mod+mod)%mod;}}}return C; }int out(matrix A,matrix B) {cout<<"s:"<<endl;cout<<A.a[0][0]<<" "<<A.a[0][1]<<" "<<A.a[0][2]<<endl;cout<<A.a[1][0]<<" "<<A.a[1][1]<<" "<<A.a[1][2]<<endl;cout<<A.a[2][0]<<" "<<A.a[2][1]<<" "<<A.a[2][2]<<endl;cout<<"base:"<<endl;cout<<B.a[0][0]<<" "<<B.a[0][1]<<" "<<B.a[0][2]<<endl;cout<<B.a[1][0]<<" "<<B.a[1][1]<<" "<<B.a[1][2]<<endl;cout<<B.a[2][0]<<" "<<B.a[2][1]<<" "<<B.a[2][2]<<endl;return 0; }matrix pow_mod(long long x) {matrix s,base;base.a[0][0]=2;base.a[1][0]=-1;base.a[2][0]=1;base.a[0][1]=1;base.a[1][1]=base.a[2][1]=0;base.a[1][2]=1;base.a[0][2]=base.a[2][2]=0;s.a[0][0]=7;s.a[0][1]=4;s.a[0][2]=2;s.a[1][0]=s.a[1][1]=s.a[1][2]=0;s.a[2][0]=s.a[2][1]=s.a[2][2]=0;out(s,base);while(x){if(x&1)s=cal(s,base);base=cal(base,base);out(s,base);x>>=1;}return s; }int main() {long long n;long long ans;while(scanf("%lld",&n)!=EOF){if(n==0)cout<<0<<endl;else if(n==1)cout<<2<<endl;else if(n==2)cout<<4<<endl;else if(n==3)cout<<7<<endl;else{matrix t=pow_mod(n-3);ans=t.a[0][0]%mod;cout<<ans<<endl;/*cout<<t.a[0][1]%mod<<endl;cout<<t.a[1][0]%mod<<endl;cout<<t.a[1][1]%mod<<endl;*/}}return 0; }
转载于:https://www.cnblogs.com/lmhbk/p/5919666.html
51nod 算法马拉松18 B 非010串 矩阵快速幂相关推荐
- 蓝桥杯 算法提高 递推求值(矩阵快速幂)详解
传送门 问题描述 已知递推公式: F(n, 1)=F(n-1, 2) + 2F(n-3, 1) + 5, F(n, 2)=F(n-1, 1) + 3F(n-3, 1) + 2F(n-3, 2) + 3 ...
- 51nod 1836战忽局的手段(期望+矩阵快速幂)
战忽局的手段 n n n个事件, m m m次演讲 定义 d p [ i ] dp[i] dp[i]为 i i i次演讲的期望次数 d p [ 1 ] = 1 dp[1]=1 dp[1]=1 d p ...
- 51nod 1836 战忽局的手段(期望+矩阵快速幂)
众所周知,有一个神秘的组织--战忽局,在暗中保护着我们.在局中任职的官员都有着极强的忽悠技巧,不只能用预言,还能用往事忽悠人.如今某外星间谍已经获得了战忽局曾经参与的n次事件的资料,局座发现了这件事, ...
- mysql 矩阵运算_MySQL实现算法:矩阵快速幂
前几日在地铁上和好友讨论起MySQL数据库,由于MySQL数据库不支持复合类型变量,就想到能否用MySQL去实现一些算法呢.最近在学习MySql存储程序,昨天闲来无事,就动手写写吧,借此巩固一下存储过 ...
- 杭电ACM-LCY算法进阶培训班-专题训练(矩阵快速幂)
杭电ACM-LCY算法进阶培训班-专题训练(矩阵快速幂)[模板] 传送门 杭电ACM-LCY算法进阶培训班-专题训练(矩阵快速幂)[模板] 矩阵快速幂模板 Count Problem Descript ...
- 算法分类整理+模板①:矩阵快速幂
一直有一个想法,感觉自己很多基础算法不是很扎实,想要找个机会写一些算法的整理,顺便自己总结一些实用的模板. 最近偶然在训练赛中连续做了2道思维+矩阵快速幂的题目,碰巧有时间,就以矩阵快速幂作为这个系列 ...
- 51nod 1113 矩阵快速幂
1113 矩阵快速幂 基准时间限制:3 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 给出一个N * N的矩阵,其中的元素均为正整数.求这个矩阵的M次方.由于M次方的计算结果太大 ...
- 矩阵快速幂(51nod)
1113 矩阵快速幂 基准时间限制:3 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 给出一个N * N的矩阵,其中的元素均为正整数.求这个矩阵的M次方.由于M次方的计算结果太大, ...
- 51nod 1113 矩阵快速幂 模板题
1113 矩阵快速幂 基准时间限制:3 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 给出一个N * N的矩阵,其中的元素均为正整数.求这个矩阵的M次方.由于M次方的计 ...
最新文章
- c语言孩子兄弟法存储一棵树,数据结构(C语言版)---树
- RHEL/CentOS查看网卡的MAC地址
- 批量打印html文档,web页面的单页打印以及批量打印实现方法
- webgis 行政图报错_WebGIS 地图 示例源码下载
- Windows 环境 Jenkins集成构建SonarQube
- 利用可视化软件navicat查看表的sql语句
- HTML的DOM和浏览器的BOM
- 【英语学习】【医学】Unit 03 Blood
- 【英语学习】【WOTD】reverberate 释义/词源/示例
- 重新认识鸿鹄与燕雀的区别
- paip.python ide 总结最佳实践o4.
- 2019常用的几种编程语言的简单介绍和特点以及应用领域
- 基于AutoCAD自动数控编程工具NC_Manu_Tool(最新V1.39)
- 调用微信支付api实现用户扫描二维码支付订单
- 人工智能正在重塑人力资源的7种方式
- IDEA的插件,IDEA强大的插件库
- python的ide编辑器_python轻量IDE编辑器 pyscripter 免费开源 更新3.6.3版本
- 让梁大侠头疼的CPU段式结构的由来
- database changed是什么意思_itunes其他是什么 itunes其他清除方法介绍【图文教程】...
- html5 swf在线播放,html5怎样播放swf格式的视频
热门文章
- python手机版iphone-Python编程狮下载
- python基础教程pdf百度云-《Python基础教程(第3版)》PDF高清版
- python是干什么用的视频-python基础教程千锋最新视频学完之后可以做什么
- python好学吗mooc中文网-2020年大学mooc用Python玩转数据作业答案
- python中的time库安装步骤-Python time库基本操作方法
- monty python flying circus-巨蟒剧团之飞翔的马戏团 第1季
- python下载大文件-python-Django:允许用户下载大文件
- 以下哪个不是python中的关键字-以下不是python中的关键字
- python多线程爬虫实例-python支持多线程的爬虫实例
- python中可以用中文作为变量-Python中用中文变量名、函数名,会影响性能吗?