题目链接

好久没写高精度了,调了很久QAQ

如果直接递归计算答案的话肯定会T

发现一个数不管是分成一奇一偶还是直接>>1,都会重复计算很多东西

我们只需要在递归的时候实时维护一个xx(ans[x])和xxx(ans[x-1])

一层一层的选择更新xx或xxx就好

(请无视递归函数的名称和里面乱搞的数字)

 #include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<string>
#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
#include<map>
#include<set>
#define rre(i,r,l) for(int i=(r);i>=(l);i--)
#define re(i,l,r) for(int i=(l);i<=(r);i++)
#define Clear(a,b) memset(a,b,sizeof(a))
#define inout(x) printf("%d",(x))
#define douin(x) scanf("%lf",&x)
#define strin(x) scanf("%s",(x))
#define LLin(x) scanf("%lld",&x)
#define op operator
#define CSC main
typedef unsigned long long ULL;
typedef const int cint;
typedef long long LL;
using namespace std;
void inin(int &ret)
{
ret=;int f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=;ch=getchar();}
while(ch>=''&&ch<='')ret*=,ret+=ch-'',ch=getchar();
ret=f?-ret:ret;
}
struct hint
{
int a[],len;
void clear(){Clear(a,);len=;}
void maintain()
{
for(len=;len>=;len--)
if(a[len])break;
}
void in()
{
char ch;len=;
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')a[++len]=ch-'',ch=getchar();
re(i,,len>>)swap(a[i],a[len-i+]);
}
hint op / (int x)
{
hint rhs=*this;
int ex=;
rre(i,rhs.len,)
{
ex*=;
rhs.a[i]+=ex;
ex=rhs.a[i]%;
rhs.a[i]>>=;
if(!rhs.a[i]&&i==len)rhs.len--;
}
rhs.a[rhs.len+]=;
return rhs;
}
hint op + (int x)
{
hint rhs=*this;
int ex=;
re(i,,rhs.len)
{
rhs.a[i]+=ex;
ex=rhs.a[i]/;
if(rhs.a[i]==&&i==len)rhs.len++;
rhs.a[i]%=;
}
rhs.a[rhs.len+]=;
return rhs;
}
hint op + (hint &xx)
{
hint rhs=*this;
rhs.len=max(rhs.len,xx.len);
int ex=;
re(i,,rhs.len)
{
rhs.a[i]+=xx.a[i]+ex;
ex=rhs.a[i]/;
if(rhs.a[i]>)rhs.len++;
rhs.a[i]%=;
}
rhs.a[rhs.len+]=;
return rhs;
}
bool op == (int x)
{
return len==&&a[]==;
}
bool op & (int x)
{
return a[]&;
}
void out()
{
rre(i,len,)printf("%d",a[i]);
}
};
int n;hint x,xx,xxx;
void wocao(hint x)
{
if(x==3.145926535897932384626433823)
{
xx=x;xxx.clear();
return ;
}
wocao((x+/3.14)/);
if(x&)xx=xx+xxx,xx.maintain();
else xxx=xx+xxx,xxx.maintain();
}
int main()
{
freopen("in.in","r",stdin);
freopen("out.out","w",stdout);
inin(n);
while(n--)
{
x.clear();
x.in();
wocao(x);
xx.out();cout<<"\n";
}
return ;
}

bzoj2656 [Zjoi2012]数列(sequence)的更多相关文章

  1. BZOJ2656 [Zjoi2012]数列(sequence)[模拟]

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

  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. linux下修改/etc/profile文件

    inux下修改/etc/profile文件 2017年01月06日 14:30:12 白昙 阅读数:8540 标签: linux 更多 个人分类: linux   通常情况下,/etc/profile ...

  2. 萌新接触前端的第二课——CSS

    前端知识——CSS CSS(英文全称:Cascading Style Sheets) 中文名层叠样式表,是一种用来表现HTML或XML等文件样式的计算机语言.CSS不仅可以静态地修饰网页,还可以配合各 ...

  3. python-类属性和对象属性(转)

    class People(object): # 类属性是指定义在类的内部而且在方法的外部的属性 money = 10000 def __init__(self,name,age,gender=1): ...

  4. sap component 导航 链接

    1: 定义一个导航链接名字,这个名子如果在程序中遇到(该名字会在程序中使用),就会触发这样一个导航. 导航有两个view,一个原来的view,一个出发abc之后的target view,也就是目标视图 ...

  5. [redis]redis常用

    https://redis.io/topics/quickstart $ redis-cli ping PONG redis-server is the Redis Server itself. re ...

  6. 4A

    #include <iostream> using namespace std; int main() { int a; cin>>a; if((a>=4) && ...

  7. Java 基础 面向对象修饰符和自定义数据类型

    不同修饰符使用细节 常用来修饰类.方法.变量的修饰符如下: public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是 ...

  8. squid 快速配置

    安装 yum install squid -y yum install httpd-tools -y 基本认证配置文件 #网络 http_port dns_nameservers 100.100.2. ...

  9. 用v-if 来给不同筛选出来的todo添加不同的按钮

    凡是数据里面有属性a为2的 我就给它放1,2,3   3个按钮 ,有属性为3的就没得按钮 ,属性a为1的 就给它 13两个按钮 效果如下:

  10. Ext.define细节分析

    自己写的其实还是不懂,再看看别人写的吧Extjs4 源码分析系列一 类的创建过程https://www.cnblogs.com/creazyguagua/p/4302864.htmlhttp://ww ...