这个递推式子可以发现$i$是偶数下标可以缩一半,是奇数下标就可以拆成两个下标,$\lfloor \frac{i}{2} \rfloor$以及$\lfloor \frac{i}{2}+1 \rfloor$。

然后发现每次奇数下标可以拆成一奇一偶,而拆出来的奇再拆和偶的减半得到的下标只有两种。比如:

$A_{13}=1*A_6+1*A_7$

   $=1*A_3+1*A_3+1*A_4$

   $=2*A_3+1*A_4$

   $=2*A_1+2*A_2+1*A_2$

   $=2*A_1+3*A_2$

大概就是这个亚子。于是只要记录每次拆出来的两个数$a,b$各需要多少个加起来才能表示原数,

再拆时讨论一下是$b$奇$a$偶,还是$a$奇$b$偶,分两种情况将这个系数累加即可。一直折半到$A_1$停下输出。


高精又WA了一发。。我好菜。WA:line31是b.n。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define dbg(x) cerr << #x << " = " << x <<endl
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
template<typename T>inline T _min(T A,T B){return A<B?A:B;}
template<typename T>inline T _max(T A,T B){return A>B?A:B;}
template<typename T>inline char MIN(T&A,T B){return A>B?(A=B,):;}
template<typename T>inline char MAX(T&A,T B){return A<B?(A=B,):;}
template<typename T>inline void _swap(T&A,T&B){A^=B^=A^=B;}
template<typename T>inline T read(T&x){
x=;int f=;char c;while(!isdigit(c=getchar()))if(c=='-')f=;
while(isdigit(c))x=x*+(c&),c=getchar();return f?x=-x:x;
}
const int N=+,base=1e8,dig=;
struct thx{
int a[N],n;
inline void mst(){memset(a,,sizeof a),n=;}
thx(){mst();}
inline int &operator [](int x){return a[x];}
inline void get_num(int x){mst(),n=;while(x)a[++n]=x%base,x/=base;}
inline void operator =(int x){get_num(x);}
inline thx operator +(thx&orz){
thx b;b.n=_max(n,orz.n);
for(register int i=;i<=b.n;++i)b[i]+=a[i]+orz[i],b[i+]=b[i]/base,b[i]%=base;
while(b[b.n+]&&++b.n);//mistake!
return b;
}
inline void operator +=(thx&orz){*this=*this+orz;}
inline void operator ++(){
++a[];int tmp=;
while(a[tmp]==base)a[tmp]=,++a[++tmp];
while(a[n+]&&++n);
}
inline void div2(){
for(register int i=n;i;--i)a[i-]+=(a[i]&)*base,a[i]/=;
while(!a[n]&&--n);if(!n)n=;
}
inline void read(){
mst();
char s[+];scanf("%s",s+);int len=strlen(s+);
for(register int i=;dig*(i-)<len;++i)
for(register int j=,bas=;j<=_min(dig,len-dig*(i-));++j,bas*=)a[i]+=(s[len-dig*(i-)-j+]-'')*bas;
n=len/dig+(len%dig!=);
}
inline void print(){
printf("%d",a[n]);
for(register int i=n-;i;--i)printf("%08d",a[i]);
puts("");
}
}val,a,b,x,y,tmp;
int T; int main(){//freopen("9.in","r",stdin);freopen("9.ans","w",stdout);
read(T);while(T--){
val.read();
if(val.n==&&val[]==){puts("");continue;}
while(!(val[]&))val.div2();
if(val.n==&&val[]==){puts("");continue;}
val.div2();b=a=val;++b;x=,y=;
while(!(a.n==&&a[]==)){//printf("x="),x.print(),printf("y="),y.print();
if(a[]&)y+=x,a.div2(),b=a,++b;
else x+=y,a.div2(),b=a,++b;
}//puts("done");
x+=y;x.print();
}
return ;
}

BZOJ2656 [Zjoi2012]数列(sequence)[模拟]的更多相关文章

  1. bzoj2656 [Zjoi2012]数列(sequence)

    题目链接 好久没写高精度了,调了很久QAQ 如果直接递归计算答案的话肯定会T 发现一个数不管是分成一奇一偶还是直接>>1,都会重复计算很多东西 我们只需要在递归的时候实时维护一个xx(an ...

  2. [BZOJ2656][codevs1207][Zjoi2012]数列(sequence)

    [BZOJ2656][codevs1207][Zjoi2012]数列(sequence) 试题描述 小白和小蓝在一起上数学课,下课后老师留了一道作业,求下面这个数列的通项公式: 小白作为一个数学爱好者 ...

  3. 【BZOJ 2656】2656: [Zjoi2012]数列(sequence) (高精度)

    2656: [Zjoi2012]数列(sequence) Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 1499  Solved: 786 Descri ...

  4. bzoj 2656 [Zjoi2012]数列(sequence) 递推+高精度

    2656: [Zjoi2012]数列(sequence) Time Limit: 2 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Descri ...

  5. 【bzoj2656】[Zjoi2012]数列(sequence) 高精度

    题目描述 给出数列 $A$ 的递推公式如下图所示,$T$ 次给定 $n$ ,求 $A_n$ . 输入 输入文件第一行有且只有一个正整数T,表示测试数据的组数.第2-T+1行,每行一个非负整数N. 输出 ...

  6. BZOJ2656 [Zjoi2012]数列

    Description 小白和小蓝在一起上数学课,下课后老师留了一道作业,求下面这个数列的通项公式: $$\begin{aligned}A_0 &= 0\\A_1 &= 1\\A_{2 ...

  7. bzoj 2656 [Zjoi2012]数列(sequence)(高精度)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2656 [题意] 计算大数递推式 [思路] 高精度 [代码] #include<c ...

  8. 2656: [Zjoi2012]数列(sequence)(递归+高精度)

    好久没写题了T T NOIP 期中考双血崩 显然f(x)=f(x>>1)+f((x>>1)+1),考虑每次往x>>1递归,求出f(x),复杂度O(logN) 我们设 ...

  9. 洛谷 P2609 [ZJOI2012]数列 解题报告

    P2609 [ZJOI2012]数列 题目描述 小白和小蓝在一起上数学课,下课后老师留了一道作业,求下面这个数列的通项公式: A(0)=0 A(1)=1 A(2i)=A(i) (对于任意 i>0 ...

随机推荐

  1. 【Web】[原创]ie6,7中td和img之间有间隙

    情形描述 开发工具:VS2010: 浏览器版本:IE6以上,火狐,谷歌: 页面布局设计:Table+Img布局: 项目预览问题:火狐,谷歌,IE8以上未出现问题,IE6,IE7图片之间有间隙. 分析原 ...

  2. 【Python开发】Url中文字符时记得转码edcode("utf-8")

    在url中使用中文其实是一个坏习惯,会带来一系列的转码问题, 我更喜欢英文译名或者id来标识某个uri.但是现实往往是残酷的, 特别是在我们调用别人服务时候,有时候被逼无奈使用中文URL. Pytho ...

  3. 【VS开发】内存泄漏相关问题

    之所以撰写这篇文章是因为前段时间花费了很大的精力在已经成熟的代码上再去处理memory leak问题.写此的目的是希望我们应该养成良好的编码习惯,尽可能的避免这样的问题,因为当你对着一大片的代码再去处 ...

  4. Nginx网络负载均衡,负载均衡,网络负载,网络均衡

    本节就聊聊采用Nginx负载均衡之后碰到的问题: Session问题 文件上传下载 通常解决服务器负载问题,都会通过多服务器分载来解决.常见的解决方案有: 网站入口通过分站链接负载(天空软件站,华军软 ...

  5. 再谈MV*(MVVM MVP MVC)模式的设计原理—封装与解耦

    精炼并增补于:界面之下:还原真实的MV*模式 图形界面的应用程序提供给用户可视化的操作界面,这个界面提供给数据和信息.用户输入行为(键盘,鼠标等)会执行一些应用逻辑,应用逻辑(application ...

  6. 合并两个排序的链表递归和非递归C++实现

    题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,要求合成后的链表满足单调不减规则. 1.分析 已知输入的两个链表递增有序,要使输出的链表依然递增有序,可以依次从输入的两个链表中挑选最小的 ...

  7. 【转帖】Gitlab 从 12.1 版本开始将不再支持 MySQL !

    Gitlab 从 12.1 版本开始将不再支持 MySQL ! Gitlab 官方宣布,将从 12.1 版本开始不再支持 MySQL 数据库. http://news.51cto.com/art/20 ...

  8. Linux下安装双JDK环境与双服务器

    安装双JDK环境和双服务器,具体操作如下: (1)使用tar -xvf命令解压Tomcat: (2)在Tomcat服务器下的bin文件夹下的catalina.sh文件中的头部加入以下内容: (3)修改 ...

  9. Python学习【day04】- Python基础(集合、函数)

    集合 #!/usr/bin/env python # -*- coding:utf8 -*- # set集合 只可放不可变的数据类型,本身是可变数据类型,无序 # s = {1,2,3,[1,2,3] ...

  10. python之成像库pillow

    目录 python之成像库pillow 官方文档 图像模块(Image.Image) Image模块的功能 Image.new(mode,size,color): Image.open(file,mo ...