zoukankan      html  css  js  c++  java
  • #斐波那契#洛谷 3424 [POI2005] SUM-Fibonacci Sums

    题目

    已知(x,y)的斐波那契表示,求(x+y)的斐波那契表示


    分析

    显然得到两条性质:

    1. (f_{i+1}=f_{i-1}+f_i)
    2. (2f_i=f_{i+1}+f_{i-2})

    那么从最高位开始最多会影响到前两位的结果,那判定一下就好了,
    时间复杂度(O(len)),实测(O(len^2))会T,但我也不会证明上述方法正确性


    代码

    #include <cstdio>
    #include <cctype>
    #include <algorithm>
    #define rr register 
    using namespace std;
    const int N=1000011; 
    int len,len1,a[N]; 
    inline signed iut(){
    	rr int ans=0; rr char c=getchar(); 
    	while (!isdigit(c)) c=getchar(); 
    	while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar(); 
    	return ans; 
    }
    inline void only(int now){
    	if (a[now]<=1) return; a[now]-=2;
    	if (now==1) ++a[2];
    	    else if (now==2) ++a[1],++a[3];
    	        else ++a[now-2],++a[now+1];
    }
    inline void both(int now){
    	for (;a[now]&&a[now+1];now+=2)
    	    ++a[now+2],--a[now],--a[now+1];
    }
    signed main(){
    	len1=iut(); for(rr int i=1;i<=len1;i++) a[i]=iut(); 
    	len=iut(); for (rr int i=1;i<=len;++i) a[i]+=iut(); 
        len1=len>len1?len:len1;
        for (rr int i=len1;i;--i)
        only(i),both(i),
    		only(i+1),both(i+1),
    		    only(i+2),both(i+2);
    	for (len=len1+10;!a[len];--len);
    	printf("%d",len);
    	for(rr int i=1;i<=len;++i) putchar(32),putchar(a[i]+48);
    	return 0; 
    }
    
  • 相关阅读:
    ambari
    linux常用命令
    scala新版本学习(3)
    Spring中的AOP
    Spring中的Bean
    Spring的基本应用(1):依赖以及控制反转
    Scala新版本学习(2):
    python之time模块
    python之编码与解码
    爬虫之re数据提取的使用
  • 原文地址:https://www.cnblogs.com/Spare-No-Effort/p/13763295.html
Copyright © 2011-2022 走看看