c_cpp HOJ 52瀚瀚数列@ 2013-02-18 20:14:18

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp HOJ 52瀚瀚数列@ 2013-02-18 20:14:18相关的知识,希望对你有一定的参考价值。

#include<iostream>
#define MAX 1000100
using namespace std;
  
int n[1000000],m[1000000],ans[MAX];
int nd,md,ansd;
int main(){
    cin>>nd;
    for(int i=0;i<nd;i++)cin>>n[i];
    cin>>md;
    for(int i=0;i<md;i++)cin>>m[i];
    ansd=max(nd,md);
    for(int i=0;i<ansd;i++)ans[i]=n[i]+m[i];
    for(int i=ansd;i<MAX;i++)ans[i]=0;
     
    for(int i=ansd;i>=0;i--){
        //2*H(n)=H(n-2)+H(n+1)
        if(ans[i]>=2){
            if(i==0){ans[0]-=2;ans[1]++;}
            else if(i==1){ans[1]-=2;ans[0]++;ans[2]++;}
            else if(ans[i-1]==0&&ans[i+1]==0){
                ans[i]-=2;ans[i-2]++;ans[i+1]++;
            }
        }
        if(ans[ansd]>=1)ansd++;
    }
      
    int ok=0;    
    while(!ok){
        for(int i=ansd;i>=0;i--){
            if(ans[i]>=1&&ans[i+1]>=1){
                ans[i]--;ans[i+1]--;ans[i+2]++;
            }
            if(ans[ansd]>=1)ansd++;
        }
        ok=1;
        for(int i=0;i<ansd;i++){
            if(ans[i]>1||(ans[i]>=1&&ans[i+1]>=1)){
                ok=0;
            }
        }
    }
      
    //處理最後進位
    /*if(ans[ansd-2]==1&&ans[ansd-1]==1){
        ans[ansd-2]--;ans[ansd-1]--;ans[ansd]++;
        ansd++;
    }*/
    cout<<ansd;
    for(int i=0;i<ansd;i++){
        assert(ans[i]==0||ans[i]==1);
        cout<<" "<<ans[i];
    }
}

以上是关于c_cpp HOJ 52瀚瀚数列@ 2013-02-18 20:14:18的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp HOJ - 302:最大平均值[AC]; http://hoj.twbbs.org/judge/judge/submission/21872

c_cpp 斐波那契数列的.cpp

c_cpp 一行代码实现斐波那契数列

c_cpp 有一个长度为n个(n <= 100)的数列,该数列定义为从2开始的递增有序偶数(公差为2的等差数列),现在要求你按照顺序每米个数求出一个平均值,如果最后不足m个,则以实际数量求平均值

HOJ——T 1867 经理的烦恼

HOJ 1006