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;
}

浙公网安备 33010602011771号