zoukankan      html  css  js  c++  java
  • 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
    
    ",ans);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    四种nlogn排序算法代码
    HDU1421
    HDU1789
    HDU1978
    HDU2059
    HDU2089
    深入理解数组与指针的区别
    存储字节对齐问题
    h5新特性<data*>
    浏览器的标准模式和怪异模式
  • 原文地址:https://www.cnblogs.com/jie-dcai/p/4007993.html
Copyright © 2011-2022 走看看