Description

对于每个数字x,我们总可以把它表示成一些斐波拉切数字之和,比如8 = 5 + 3,  而22 = 21 + 1,因此我们可以写成  x = a1 * Fib1 + a2 * Fib2 + a3 * Fib3 + … + an * Fibn, 其中,Fib1 = 1, Fib2 = 2…. Fib[i] = Fib[i – 1] + Fib[I - 2],  且a[n] > 0.那么我们称ai为x的一种斐波拉切表示,由于表示方法有很多种,我们要求最大化a[1…n],即,如果b[1…n]和a[1…m]都可以表示x,若m >  n 则a更大,若  m  =  n,  则从高位到低位比,第一个不同处i,若ai  > bi  则a比b大。

你的任务很简单,给你两个用斐波拉切数最大化表示的两个数字,输出他们相加后用斐波那契最大化表示的数字。

 

Input

两行,分别表示两个数字

每一行开头一个n,表示长度

然后紧接着n个数字,为从低位到高位。

Output

同输入格式。一行。
 

Sample Input

4 0 1 0 1
5 0 1 0 0 1

Sample Output

6 1 0 1 0 0 1
 

Data Constraint

对于30%的数据  长度  <= 1000

对于100%的数据  长度  <= 1000000

算出十进制值相加后再用斐波那契最大化表示显然接受不了,我们得在序列里找出规律。

这里有两个不难发现的运算法则:

1.如果有连续两位i,i-1是1,那么它们可以“运算”使得第三位i+1是1.    如 0 1 0 1 1 0 = 0 1 0 0 0 1

2.如果这个位i是2,那么它可以使它的后一位i+1和前两位i-2是1.  如 0 0 2 0 0 1 0=1 0 0 1 0 1 0

随便弄上十几次这样就可以了。

 #include<cstdio>
#include<iostream>
using namespace std;
int f[],n,x,len1,len2;
int main(){
f[]=;
f[]=;
f[]=;
scanf("%d",&len1);
for (int i=;i<=len1;i++)
scanf("%d",&f[i]);
scanf("%d",&len2);
for (int i=;i<=len2;i++){
int x=;
scanf("%d",&x);
f[i]+=x;
}
int qwq=max(len1,len2);
int qoq=true;
do{
qoq=false;
int qaq=qwq;
for (int i=;i<=qwq;i++){
if ((f[i-])&&(f[i])){
f[i+]++;
qwq=max(qwq,i+);
f[i]--;
f[i-]--;
}
}
if (f[]==){
f[]++;
f[]=;
}
if (f[]==){
f[]++;
qwq=max(qwq,);
f[]++;
f[]=;
}
bool quq=true;
do{
quq=false;
for (int i=;i<=qaq;i++){
if (f[i]>=){
quq=true;
f[i+]++;
qwq=max(i+,qwq);
f[i-]++;
f[i]--;
f[i]--;
}
}
if (quq) qoq=true;
} while(quq);
} while(qoq); //直到没修改为止
printf("%d ",qwq);
for(int i=;i<=qwq;i++)
printf("%d ",f[i]);
return ;
}

神奇的代码

JZOJ.3769【NOI2015模拟8.14】A+B的更多相关文章

  1. JZOJ【NOIP2013模拟联考14】隐藏指令

    JZOJ[NOIP2013模拟联考14]隐藏指令 题目 Description 在d维欧几里得空间中,指令是一个长度为2N的串.串的每一个元素为d个正交基的方向及反方向之一.例如,d = 1时(数轴) ...

  2. JZOJ 【NOIP2017提高A组模拟9.14】捕老鼠

    JZOJ [NOIP2017提高A组模拟9.14]捕老鼠 题目 Description 为了加快社会主义现代化,建设新农村,农夫约(Farmer Jo)决定给农庄里的仓库灭灭鼠.于是,猫被农夫约派去捕 ...

  3. JZOJ.5274【NOIP2017模拟8.14】数组

    Description

  4. JZOJ.5275【NOIP2017模拟8.14】水管

    Description

  5. JZOJ.5273【NOIP2017模拟8.14】亲戚

    Description

  6. JZOJ.3777【NOI2015模拟8.17】最短路(shortest)

    Description        小Y最近学得了最短路算法,一直想找个机会好好练习一下.话虽这么说,OJ上最短路的题目都被他刷光了.正巧他的好朋友小A正在研究一类奇怪的图,他也想凑上去求下它的最短 ...

  7. [JZOJ]100047. 【NOIP2017提高A组模拟7.14】基因变异

    21 世纪是生物学的世纪,以遗传与进化为代表的现代生物理论越来越多的 进入了我们的视野. 如同大家所熟知的,基因是遗传因子,它记录了生命的基本构造和性能. 因此生物进化与基因的变异息息相关,考察基因变 ...

  8. [JZOJ]100046【NOIP2017提高A组模拟7.14】收集卡片

    Star 计划订购一本将要发行的周刊杂志,但他可不是为了读书,而是-- 集卡. 已知杂志将要发行 N 周(也就是 N 期),每期都会附赠一张卡片.Star 通 过种种途径,了解到 N 期杂志附赠的卡片 ...

  9. JZOJ[3771] 【NOI2015模拟8.15】小 Z 的烦恼

    题目 描述 题目大意 有从111到nnn的数字,每个数字都可以放在一个盒子里(可以不放).一旦放,满足: 如果它不在第mmm个盒子,那么它的两倍一定在后面一个盒子里. 如果它不在第111个盒子,那么它 ...

随机推荐

  1. 【微信小程序】获取轮播图当前图片下标、滑动展示对应的位数、点击位数展示对应图片

    业务需求: 3个图片轮番播放,可以左右滑动,点击指示点可以切换图片  index.wxml: 这里使用小程序提供的<swiper>组件autoplay:自动播放interval:自动切换时 ...

  2. 编译ORBSLAM2 build_ros.sh,实现kinect2在ROS环境下运行ORBSLAM2

    //編譯ORBSLAM2 build_ros.sh參考:“http://www.cnblogs.com/bigzhao/p/6635770.html”1.source ~/.bashrc出現問題:ct ...

  3. C语言控制台打印3D爱心图案

    非常多程序猿都认为自己的编程工作十分的鼓噪乏味.一整天面对的都是一些写不完的代码和改不完的Bug.今天我们要给大家分享一些有趣的C语言代码,也许能够为你无聊的工作带来一丝乐趣. 这些代码能够完毕几个不 ...

  4. Nav titleView 设置的两个方式

    1.self.navigationItem.titleView = vv; 2.[self.navigationController.navigationBar addSubview:vv];

  5. UIView的使用setNeedsDisplay

    1,UIView的setNeedsDisplay和setNeedsLayout方法   首先两个方法都是异步运行的.而setNeedsDisplay会调用自己主动调用drawRect方法.这样能够拿到 ...

  6. Bash中的括号(二)

    双方括号[[]]的用法: 1.先举个例子说明: 假如你要再判断某个目录是否存在,又想当然写成: $ [ -f exists.txt && -d exists_folder ]; ech ...

  7. Unity编辑器下获取动画的根运动状态并修改

    我最初想直接修改.anim文件 但通过后来得到的信息,其实根运动状态储存在FBX.meta文件里,转出的.anim文件虽然也有根运动的信息但是算是塌陷过的,无法进行开关操作. 这是我针对有根运动.an ...

  8. 140726暑期培训.txt

    1.   输入多组数据的时候       while(scanf("%s",s)!=EOF)       while(gets(s)!=NULL)     用gets和scanf不 ...

  9. iOS开发25个性能调优技巧

    1. 用ARC管理内存 ARC(Automatic Reference Counting, 自动引用计数)和iOS5一起发布,它避免了最常见的也就是经常是由于我们忘记释放内存所造成的内存泄露.它自动为 ...

  10. 清理iOS中的“其他”空间垃圾文件

    关于如何清理 iOS 里的"其他"空间的教程,网上搜索那是一大堆,不过都是对于2010年某坛某篇"技术文"的无数次简单复制粘帖,可行性已经被各路尝试者们踩到了地 ...