JZOJ.3769【NOI2015模拟8.14】A+B
2017-08-07 07:41
302 查看
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> 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[10000002],n,x,len1,len2; int main(){ f[0]=0; f[1]=0; f[2]=0; scanf("%d",&len1); for (int i=1;i<=len1;i++) scanf("%d",&f[i]); scanf("%d",&len2); for (int i=1;i<=len2;i++){ int x=0; scanf("%d",&x); f[i]+=x; } int qwq=max(len1,len2); int qoq=true; do{ qoq=false; int qaq=qwq; for (int i=2;i<=qwq;i++){ if ((f[i-1])&&(f[i])){ f[i+1]++; qwq=max(qwq,i+1); f[i]--; f[i-1]--; } } if (f[1]==2){ f[2]++; f[1]=0; } if (f[2]==2){ f[3]++; qwq=max(qwq,3); f[1]++; f[2]=0; } bool quq=true; do{ quq=false; for (int i=3;i<=qaq;i++){ if (f[i]>=2){ quq=true; f[i+1]++; qwq=max(i+1,qwq); f[i-2]++; f[i]--; f[i]--; } } if (quq) qoq=true; } while(quq); } while(qoq); //直到没修改为止 printf("%d ",qwq); for(int i=1;i<=qwq;i++) printf("%d ",f[i]); return 0; }
神奇的代码
相关文章推荐
- Jzoj3769【NOI2015模拟8.14】A+B
- JZOJ 3769. 【NOI2015模拟8.14】A+B
- 【JZOJ 3769】【NOI2015模拟8.14】A+B
- 【jzoj3769】【NOI2015模拟8.14】【A+B】
- JZOJ3777. 【NOI2015模拟8.17】最短路(shortest)
- JZOJ 3819. 【NOI2015模拟9.9】取石子
- 【NOI2015模拟8.14】A+B
- JZOJ3975. 【NOI2015模拟1.17】串
- 【JZOJ3973】【NOI2015模拟1.10】【NOI2013湖南省队集训】黑白树(wbtree)(并查集)
- 【jzoj3771】【NOI2015模拟8.15】【小 Z 的烦恼】
- 【JZOJ3819】【NOI2015模拟9.9】【hdu 4111】取石子(博弈+贪心+记忆化搜索)
- 【jzoj3773】【NOI2015模拟8.15】【小 P 的烦恼】【动态规划】
- JZOJ 3789. 【NOI2015模拟8.20】编辑器
- JZOJ 3786. 【NOI2015模拟8.19】图
- jzoj3819 [NOI2015模拟9.9]取石子
- JZOJ3789. 【NOI2015模拟8.20】编辑器
- A+B【NOI2015模拟8.14】
- 【JZOJ3962】【NOI2015模拟12.27】str(回文自动机)
- 【JZOJ3771】【NOI2015模拟8.15】小 Z 的烦恼
- 【JZOJ 3976】【NOI2015模拟1.17】⑨