這個題真的,毫無思路的說,可是咱們會打表啊:c++
lz的打表之路:測試
固然是手寫一個暴力啦(*^▽^*)!spa
而後滾去配置lemon測試一下暴力能夠得多少分qwq:code
是的40分呢!blog
而後其實看上面也能看出來一些規律了,定睛一看(但其實我並無看出來),斐波那契數列!?get
因而咱們就能夠找斐波那契數列中最大的小於等於k的兩項,而後碼量也很少。關鍵是找出規律qwq,而後下面是某位神仙的推導:(來自寄蜉蝣於天地,渺滄海之一粟)it
因此就寫就好啦:io
#include<bits/stdc++.h> using namespace std; inline int read(){ int ans=0; char last=' ',ch=getchar(); while(ch>'9'||ch<'0') last=ch,ch=getchar(); while(ch<='9'&&ch>='0') ans=(ans<<1)+(ans<<3)+ch-'0',ch=getchar(); if(last=='-') ans=-ans; return ans; } int k; long long f[100]; int main(){ freopen("mn,in","r",stdin); freopen("mn,out","w",stdout); k=read(); f[1]=1;f[0]=1; int i=2;long long ans; if(k==1){printf("1 1");return 0;} while(f[i]<=k){ f[i]=f[i-1]+f[i-2]; if(f[i]>k){ printf("%lld %lld",f[i-2],f[i-1]); return 0; } i++; } return 0; }
end-ast