首页 > 代码库 > ZOJ 2705
ZOJ 2705
这题,找找规律,可以发现一个斐波那契数列。按照斐波那契数列求和,知道,
SUM=Fn+2-F1,于是,该长度为Fn+2的倍数。因为斐波那契数列不一定是从1开始的,而从2开始的每个数都是从1开始的倍数。于是,只需求出最大的Fn+2是长度的倍数即可。
#include <iostream>#include <algorithm>#include <cstdio>using namespace std;typedef long long LL;LL Fib[50];void initial(){ Fib[0]=0; Fib[1]=1; for(int i=2;i<47;i++) Fib[i]=Fib[i-1]+Fib[i-2];}LL maxf(LL a,LL b){ return a>b?a:b;}int main(){ initial(); LL n,m; while(cin>>n>>m){ LL ans=0; for(int i=2;i<47;i++) if(n%Fib[i]==0){ ans=maxf(ans,(n-2*(n/Fib[i]))*m+n/Fib[i]*m); // cout<<i<<" "<<ans<<endl; } // cout<<endl; for(int i=2;i<47;i++) if(m%Fib[i]==0){ ans=maxf(ans,(m-2*(m/Fib[i]))*n+m/Fib[i]*n); // cout<<i<<" "<<ans<<endl; } printf("%lld\n\n",ans); } return 0;}
ZOJ 2705
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。