题目大意:
给你两个01数,求出他们的斐波拉切数列进制的和
思路:
手玩一下斐波拉切的变化,发现只会有两种可能,所以写一个模拟就好了。
程序:
#include<stdio.h>
#include<algorithm>
using namespace std;
int n,m,a[2000020],b[2000020],t,M;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i) scanf("%d",&a[i]);
scanf("%d",&m);
for(int i=1;i<=m;++i) scanf("%d",&b[i]);
t=M=max(n,m)+30;
if(a[1]) b[!b[1]]=1; a[1]=0;
for(int i=1;i<=t;++i) b[i]+=a[i];
for(int ii=1;(1<<ii)<=M;++ii){
for(int i=1;i<=t;++i){
if(b[i]&&b[i-1]){
int t=min(b[i],b[i-1]);
b[i+1]+=t; b[i]-=t; b[i-1]-=t;
}
}
for(int i=++t;i>0;--i){
if(b[i]>1){
b[i+1]++; b[i]-=2;
if(i>1) b[i-2]++;
}
}
}
while(b[t]==0) t--;
printf("%d ",t); b[1]+=b[0];
for(int i=1;i<=t;++i) printf("%d ",b[i]);
}