• Jzoj3769【NOI2015模拟8.14】A+B


    完成斐波那契进制下的加法运算

    第一位为1,第二位为2,依次类推。。

    这里其实很简单,只是要考虑一下进位即可

    首先连续两位不为零直接向前进位即可

    但是不能解决问题,因为可能出现一个位上面的值大于1

    那么我们可以这样做,设连续的四位分别为:0,0,2,0

    那么我们可以将其变成1,0,0,1

    这样就相当于一次进位了,多次重复以上的进位过程即可

    这里可以加上第0位方便运算

    #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 C=1;(1<<C)<=M;++C){
    		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]);
    }


  • 相关阅读:
    深入探索迭代器(续)
    深入探索迭代器
    C++ 容器的综合应用的一个简单实例——文本查询程序
    multimap 和 multiset 类型
    set 类型
    map 类型
    关联容器
    Ajax请求成功, 但进不去success方法
    springboot指定配置文件启动项目
    新测可用IntelliJ IDEA 2020.1 for mac
  • 原文地址:https://www.cnblogs.com/Extended-Ash/p/7774404.html
Copyright © 2020-2023  润新知