这个题真的,毫无思路的说,可是咱们会打表啊: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