博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一本通1644【例 4】佳佳的 Fibonacci
阅读量:5008 次
发布时间:2019-06-12

本文共 2725 字,大约阅读时间需要 9 分钟。

时间限制: 1000 ms         内存限制: 524288 KB

 

sol:搞了大概一个多小时什么结果都没,被迫去看题解,感觉自己菜到家了qaq

大家一起膜神仙

 

/*    原式    f[i] = f[i-1]+f[i-2]    T[n] = f[1]+f[2]*2+f[3]*3+...+f[n]*n    令        S[n] = f[1]+f[2]+f[3]+...+f[n]    n*S[n] = n*f[1]+n*f[2]+n*f[3]+...+n*f[n]    设    --> P[n] = n*S[n]-T[n]    --> P[n] = (n-1)*f[1]+(n-2)*f[2]+...+(n-n)*f[n]    因为    --> P[n-1] = (n-1)*S[n]-T[n-1]    --> P[n-1] = (n-2)*f[1]+(n-3)*f[2]+...+(n-1-(n-1))*f[n-1]    且    --> S[n-1] = f[1]+f[2]+f[3]+....+f[n-1]    所以    P[n]=P[n-1]+S[n-1]*/
/*    P[i] S[i] f[i] f[i-1]        1 0 0 0    1 1 0 0    0 1 1 1    0 1 1 0*/
矩阵

Ps:思路要打开

/*    f[i] = f[i-1]+f[i-2]    T[n] = f[1]+f[2]*2+f[3]*3+...+f[n]*n    S[n] = f[1]+f[2]+f[3]+...+f[n]    n*S[n] = n*f[1]+n*f[2]+n*f[3]+...+n*f[n]    设    --> P[n] = n*S[n]-T[n]    --> P[n] = (n-1)*f[1]+(n-2)*f[2]+...+(n-n)*f[n]    因为    --> P[n-1] = (n-1)*S[n]-T[n-1]    --> P[n-1] = (n-2)*f[1]+(n-3)*f[2]+...+(n-1-(n-1))*f[n-1]    且    --> S[n-1] = f[1]+f[2]+f[3]+....+f[n-1]    所以    P[n]=P[n-1]+S[n-1]        P[i] S[i] f[i] f[i-1]        1 0 0 0    1 1 0 0    0 1 1 1    0 1 1 0*/#include 
using namespace std;typedef long long ll;inline ll read(){ ll s=0; bool f=0; char ch=' '; while(!isdigit(ch)) { f|=(ch=='-'); ch=getchar(); } while(isdigit(ch)) { s=(s<<3)+(s<<1)+(ch^48); ch=getchar(); } return (f)?(-s):(s);}#define R(x) x=read()inline void write(ll x){ if(x<0) { putchar('-'); x=-x; } if(x<10) { putchar(x+'0'); return; } write(x/10); putchar((x%10)+'0'); return;}#define W(x) write(x),putchar(' ')#define Wl(x) write(x),putchar('\n')ll n,nn,Mod;ll ans[5][5],power[5][5],a[5][5],c[5][5];inline void Ad(ll &X,ll Y){ X+=Y; X-=(X>=Mod)?Mod:0; return;}int main(){ int i,j,k; nn=n=read(); n--; R(Mod); ans[1][2]=ans[1][3]=1; for(i=1;i<=4;i++) power[i][i]=1; a[1][1]=a[2][1]=a[2][2]=a[3][2]=a[3][3]=a[3][4]=a[4][2]=a[4][3]=1; while(n) { if(n&1) { memset(c,0,sizeof c); for(i=1;i<=4;i++) for(j=1;j<=4;j++) for(k=1;k<=4;k++) { Ad(c[i][j],power[i][k]*a[k][j]%Mod); } memmove(power,c,sizeof power); } memset(c,0,sizeof c); for(i=1;i<=4;i++) for(j=1;j<=4;j++) for(k=1;k<=4;k++) { Ad(c[i][j],a[i][k]*a[k][j]%Mod); } memmove(a,c,sizeof a); n>>=1; } memset(c,0,sizeof c); for(i=1;i<=1;i++) for(j=1;j<=4;j++) for(k=1;k<=4;k++) { Ad(c[i][j],ans[i][k]*power[k][j]%Mod); } memmove(ans,c,sizeof ans); Wl((ans[1][2]*nn%Mod-ans[1][1]+Mod)%Mod); return 0;}/*input5 5output1*/
View Code

 

转载于:https://www.cnblogs.com/gaojunonly1/p/10505546.html

你可能感兴趣的文章
webview与壳交互的几种方式
查看>>
python3对于时间的处理
查看>>
PE破解win2008登录密码
查看>>
JVM垃圾回收机制
查看>>
结对编程2 微软学术搜索 第一部分——功能性bug
查看>>
StarUML
查看>>
程序员需要有多懒 ?- cocos2d-x 数学函数、常用宏粗整理 - by Glede
查看>>
利用Clojure统计代码文件数量和代码行数
查看>>
课时23:递归:这帮小兔崽子
查看>>
RobotFrameWork接口报文测试-----(三)demo的加强版(数据驱动测试)
查看>>
NetBeansRCP-添加/修改NetBeans的JVM启动参数
查看>>
Linux c获取时间
查看>>
css中设置background属性
查看>>
第九周作业
查看>>
[leedcode 70] Climbing Stairs
查看>>
学习 WCF (1)--基础篇
查看>>
sql server 2008学习4 设计索引的建议
查看>>
vim 插件之vundle
查看>>
数据库多对多关联表(Python&MySQL)
查看>>
[实变函数]1.2 集合的运算
查看>>