COJ 0200 Fibonacci
传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=200
试题描述:
地球人都知道Fibonicca数列:
1 1 2 3 5 8 -----
输入两个正整数L,R,输出Fibonicca数列第L项加到第R项的结果,因为答案可能很大,请输出答案的后7位(不保留前导零)。
输入:
第一行为两个正整数L,R.
输出:
输出答案的后7位(不保留前导零)
输入示例:
1 5
输出示例:
12
其他说明:
60%数据: 1<=L<=R<=1000000
100%数据: 1<=L<=R<=2^31-1
其中20%数据保证L=R
题解:前缀和思想:f(L,R)=f(1,R)-f(1,L),然后变成裸矩阵乘。
[0 , 1 , 0]
[f(n-2),f(n-1),S(n-2)] * [1 , 1 , 1] = [f(n-1),f(n),S(n-1)]
[0 , 0 , 1]
注意n=1,2特判。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int mod=;
struct Matrix{
long long A[][];
Matrix(){memset(A,,sizeof(A));}
};
void print(Matrix M){
for(int i=;i<;i++){
for(int j=;j<;j++) printf("%d ",M.A[i][j]);
puts("");
}puts("");return;
}
Matrix mul(Matrix a,Matrix b){
Matrix ans;
for(int i=;i<;i++)
for(int j=;j<;j++){
for(int k=;k<;k++) ans.A[i][j]+=a.A[i][k]*b.A[k][j];
ans.A[i][j]%=mod;
}
return ans;
}
Matrix pow(Matrix a,int n){
Matrix ans=a,tmp=a;n--;
while(n){
if(n&) ans=mul(ans,tmp);
tmp=mul(tmp,tmp);
n>>=;
} return ans;
}
inline int read(){
int x=,sig=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-') sig=-;ch=getchar();}
while(isdigit(ch)) x=*x+ch-'',ch=getchar();
return x*=sig;
}
inline void write(int x){
if(x==){putchar('');return;} if(x<) putchar('-'),x=-x;
int len=,buf[]; while(x) buf[len++]=x%,x/=;
for(int i=len-;i>=;i--) putchar(buf[i]+'');return;
}
int initn[][]={
{,,},
{,,},
{,,}
};
int solve(int n){
if(n==) return ;
if(n==) return ;//真坑!
Matrix M;
for(int i=;i<;i++)
for(int j=;j<;j++)
M.A[i][j]=initn[i][j]; M=pow(M,n-);
//puts("here!");print(M);
return (M.A[][]+M.A[][])%mod;
} void init(){
return;
}
void work(){
int a=read(),b=read();
printf("%d\n",(solve(b)-solve(a-)+mod)%mod);
return;
}
void print(){
return;
}
int main(){
init();work();print();return ;
}
COJ 0200 Fibonacci的更多相关文章
- 算法与数据结构(九) 查找表的顺序查找、折半查找、插值查找以及Fibonacci查找
今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容.本篇博客主要介绍查找表的顺序查找.折半查找.插值查找以及Fibonacci查找 ...
- #26 fibonacci seqs
Difficulty: Easy Topic: Fibonacci seqs Write a function which returns the first X fibonacci numbers. ...
- 关于java的递归写法,经典的Fibonacci数的问题
经典的Fibonacci数的问题 主要想展示一下迭代与递归,以及尾递归的三种写法,以及他们各自的时间性能. public class Fibonacci { /*迭代*/ public static ...
- 斐波拉契数列(Fibonacci) 的python实现方式
第一种:利用for循环 利用for循环时,不涉及到函数,但是这种方法对我种小小白来说比较好理解,一涉及到函数就比较抽象了... >>> fibs = [0,1] >>&g ...
- fibonacci数列(五种)
自己没动脑子,大部分内容转自:http://www.jb51.net/article/37286.htm 斐波拉契数列,看起来好像谁都会写,不过它写的方式却有好多种,不管用不用的上,先留下来再说. 1 ...
- POJ3070 Fibonacci[矩阵乘法]
Fibonacci Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13677 Accepted: 9697 Descri ...
- Fibonacci 数列算法分析
/************************************************* * Fibonacci 数列算法分析 ****************************** ...
- 算法系列:Fibonacci
Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...
- UVa #11582 Colossal Fibonacci Numbers!
巨大的斐波那契数 The i'th Fibonacci number f (i) is recursively defined in the following way: f (0) = 0 and ...
随机推荐
- UML中的图
用例图.类图.包图.顺序图.协作图.状态图.活动图.构件图.部署图等 1.用例图 显示多个外部参与者以及他们与系统提供的用例之间的连接.用例是系统中的一个可以描述参与者与系统之间交互作用功能单元.用例 ...
- 第四节:教你如何快速让浏览器兼容ES6特性
写在正文前,本来这一节的内容应该放在第二节更合适,因为当时就有同学问ES6的兼容性如何,如何在浏览器兼容ES6的特性,这节前端君会介绍一个抱砖引玉的操作案例. 为什么ES6会有兼容性问题? 由于广大用 ...
- Python之路,Day15 - Django适当进阶篇
Python之路,Day15 - Django适当进阶篇 本节内容 学员管理系统练习 Django ORM操作进阶 用户认证 Django练习小项目:学员管理系统设计开发 带着项目需求学习是最有趣 ...
- 转载:C#中事件的由来
原文地址 http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx 感谢博主分享! 我们继续思考转 ...
- left ,right ,cross ,full/left outer join/区别 详解
--创建测试表wwif OBJECT_ID('qq') is not null drop table qqcreate table qq([序号] varchar(5),[内容1] varchar(1 ...
- <address>标签,为网页加入地址信息
一般网页中会有一些网站的联系地址信息需要在网页中展示出来,这些联系地址信息如公司的地址就可以<address>标签.也可以定义一个地址(比如电子邮件地址).签名或者文档的作者身份. 语法: ...
- 虚拟器运行iOS8地图提示错误
/SourceCache/ProtocolBuffer_Sim/ProtocolBuffer-225/Runtime/PBRequester.m:799 server (https://gsp13-c ...
- JavaScript--循环--打印星星和99乘法表
1.打印99乘法表 function chengfa(){ //反复调用公式 for(var r=1;r<=9;r++){ for(var i=1,str="";i<= ...
- tomcat中有关配置文件的说明
在以往的tomcat使用中本人一直都没有注意到tomcat的conf目录下配置文件的作用,都是"拿来主义"的思想,从未深究.但是最近遇到很多有关tomcat配置的问题,很是头大,所 ...
- 重新开始学习javase_对象的摧毁
一.概述(转:@深入理解Java虚拟机:JVM高级特性与最佳实践(最新第二版) ) 经过半个世纪的发展,内存的动态分配与内存回收技术已经相当成熟,一切看起来都进入了“自动化”时代,那为什么我们还要去了 ...