码迷,mamicode.com
首页 > 其他好文 > 详细

ZOJ 2705

时间:2014-10-06 12:01:40      阅读:284      评论:0      收藏:0      [点我收藏+]

标签:blog   io   os   for   sp   div   c   on   log   

这题,找找规律,可以发现一个斐波那契数列。按照斐波那契数列求和,知道,

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

标签:blog   io   os   for   sp   div   c   on   log   

原文地址:http://www.cnblogs.com/jie-dcai/p/4007993.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!