首页 > 其他 > 详细

洛谷[P2100] 凌乱的地下室

时间:2018-10-23 19:08:24      阅读:206      评论:0      收藏:0      [点我收藏+]

- 我Viston就算是死,死这里,从这儿跳下去,我也不可能写高精度。   

循环节最好用了....快读最好用了.....通项公式最好用了.......     

通项公式:     

F[2n] = F[n+1]2-F[n-1]2 = (2F[n-1]+F[n])F[n]

F[2n+1] = F[n+1]2 + F[n]2


于是我们就可以用这个公式+高精度取膜循环节(高精%低精可以直接在快读中进行)   

见代码

#include<bits/stdc++.h>
using namespace std;
map<long long ,long long>mmp;     //map优化递归求斐波拉契
long long a,b,c,d;
long long dfs(long long a){
    if(a==1) return 1;
    if(a==2) return 1;
    if(mmp[a]!=0) return mmp[a];
    else return
        mmp[a]=a%2==0?(dfs(a/2)+2*dfs(a/2-1))*dfs(a/2)%100000000 :
         (dfs(a/2)*dfs(a/2)+dfs(a/2+1)*dfs(a/2+1))%100000000;
}        //通项公式求斐波拉契
inline long long read(){
    long long X=0;char ch=getchar();
    while(!isdigit(ch)) ch=getchar();
    while(isdigit(ch)) X=(X*10+ch-0)%150000000,ch=getchar();
    return X;
}     //取%150000000直接在快速读入中进行
int main(){
    a=read();
    cout<<dfs(a+1);
}          //主程序真短

 

洛谷[P2100] 凌乱的地下室

原文:https://www.cnblogs.com/Viston/p/9838079.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!