acm.dlut.edu.cn--1326--FFFFFF--(矩阵快速幂)
来源:互联网 发布:服务器开放端口查看 编辑:程序博客网 时间:2024/06/05 07:14
1326: FFFFFF
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 111 Solved: 33
[Submit][Status][Web Board]
Description
光教练得到了n个不同的数(不要在意是哪些数),光教练决定按照以下规定选取若干个数:
1.若选取第i个数,则不能选取第i+1个数
2.编号连续的3个数(i-1,i,i+1)中,至少有一个必须被选取
光教练想知道,按以上的选区方案,最多有多少种方案数?
Input
一行,一个整数n(n<=10^18)
Output
一行,方案数,结果模(10^9+7)
Sample Input
129
Sample Output
2321
HINT
对于第一组样例,一个数,可以选或者不选,算两种
链接:http://acm.dlut.edu.cn/problem.php?id=1326
思路:先找规律把,a1=2,a2=3,a3=4,a4=5,a5=7,a6=9,a7=12,a8=16,a9=21,a10=28.......
根据数列增加的规律,易知a(n)=a(n-2)+a(n-3)
考虑矩阵快速幂,矩阵如下:
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <queue>#include <cmath>#include <stack>#include <vector>#include <map>#define maxn 3#define mem(a,b) memset(a,b,sizeof(a))using namespace std;typedef long long ll;const int mod=1000000000+7;struct matrix{ int n; ll maze[maxn][maxn]; void init(int n) { this->n=n; mem(maze,0); } matrix operator *(matrix& rhs) { matrix ans; ans.init(3); for(int i=0; i<n; i++) for(int j=0; j<n; j++) for(int k=0; k<n; k++) { ans.maze[i][j]=(ans.maze[i][j]+maze[i][k]*rhs.maze[k][j])%mod; } return ans; }} a,ans;void qpow(ll n){ a.init(3); a.maze[0][1]=a.maze[0][2]=a.maze[1][0]=a.maze[2][1]=1; ans.init(3); ans.maze[0][0]=ans.maze[1][1]=ans.maze[2][2]=1; while(n) { if(n&1)ans=ans*a; a=a*a; n>>=1; }}int main(){ ll n; while(cin>>n) { qpow(n); cout<<(ans.maze[0][0]*2+ans.maze[0][1]+ans.maze[0][2])%mod<<endl; } return 0;}
复制去Google翻译翻译结果
0 0
- acm.dlut.edu.cn--1326--FFFFFF--(矩阵快速幂)
- DLUT OJ1085(矩阵快速幂)
- http://acm.hdu.edu.cn/showproblem.php?pid=3524 (奇偶矩阵乘法 打表)
- 矩阵问题&&http://acm.hdu.edu.cn/showproblem.php?pid=1575
- http://acm.hdu.edu.cn/showproblem.php?pid=2256&&构造矩阵求值
- http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=301 (矩阵的用法)
- acm.jlu.edu.cn-1097-System Overload
- acm.jlu.edu.cn-1071-Maya Calendar
- acm.jlu.edu.cn-1317-Tree Recovery
- acm.jlu.edu.cn-1099-Simple Computers
- acm.jlu.edu.cn-1068-Cipher
- Problems by Topic @ acm.pku.edu.cn
- 1010(stamps),acm.pku.edu.cn
- http://acm.pku.edu.cn/JudgeOnline/
- 1293: 大斐波数(acm.zzuli.edu.cn)
- ACM-矩阵之快速幂
- http://acm.hdu.edu.cn/showproblem.php?pid=1299 (求因子个数)
- 伸展树(转载http://acm.tju.edu.cn/blog/?p=85)
- HTML5 实战之 Video Events and API
- 几种常用的适配器--Adapter
- 进程调度时机跟踪分析进程调度与进程切换的过程
- 构造器的调用顺序
- 使用SQL时,用一条命令上传多行数据
- acm.dlut.edu.cn--1326--FFFFFF--(矩阵快速幂)
- u-boot中链接地址和加载地址的相关知识
- 修改openwrt(通过stty)
- Java基础加强
- iOS 获取手机的型号,系统版本,软件名称,软件版本
- GObject对象系统
- oracle基础:插入
- 构造顺序表--合并两个按元素从小到大排列的顺序表
- 高质量C/C++编程指南(七)