【7.9校内test】T2 极值问题

这个题真的,毫无思路的说,但是我们会打表啊:

lz的打表之路:

当然是手写一个暴力啦(*^▽^*)!

然后滚去配置lemon测试一下暴力可以得多少分qwq:

是的40分呢!

然后其实看上面也能看出来一些规律了,定睛一看(但其实我并没有看出来),斐波那契数列!?

于是我们就可以找斐波那契数列中最大的小于等于k的两项,然后码量也不多。关键是找出规律qwq,然后下面是某位神仙的推导:(来自寄蜉蝣于天地,渺沧海之一粟)

所以就写就好啦:

#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-

posted @ 2019-07-09 20:21  Sweetness  阅读(125)  评论(0编辑  收藏  举报