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