bzoj2656 [Zjoi2012]数列(sequence)
好久没写高精度了,调了很久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)的更多相关文章
- BZOJ2656 [Zjoi2012]数列(sequence)[模拟]
这个递推式子可以发现$i$是偶数下标可以缩一半,是奇数下标就可以拆成两个下标,$\lfloor \frac{i}{2} \rfloor$以及$\lfloor \frac{i}{2}+1 \rfloor ...
- [BZOJ2656][codevs1207][Zjoi2012]数列(sequence)
[BZOJ2656][codevs1207][Zjoi2012]数列(sequence) 试题描述 小白和小蓝在一起上数学课,下课后老师留了一道作业,求下面这个数列的通项公式: 小白作为一个数学爱好者 ...
- 【BZOJ 2656】2656: [Zjoi2012]数列(sequence) (高精度)
2656: [Zjoi2012]数列(sequence) Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 1499 Solved: 786 Descri ...
- bzoj 2656 [Zjoi2012]数列(sequence) 递推+高精度
2656: [Zjoi2012]数列(sequence) Time Limit: 2 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Descri ...
- 【bzoj2656】[Zjoi2012]数列(sequence) 高精度
题目描述 给出数列 $A$ 的递推公式如下图所示,$T$ 次给定 $n$ ,求 $A_n$ . 输入 输入文件第一行有且只有一个正整数T,表示测试数据的组数.第2-T+1行,每行一个非负整数N. 输出 ...
- BZOJ2656 [Zjoi2012]数列
Description 小白和小蓝在一起上数学课,下课后老师留了一道作业,求下面这个数列的通项公式: $$\begin{aligned}A_0 &= 0\\A_1 &= 1\\A_{2 ...
- bzoj 2656 [Zjoi2012]数列(sequence)(高精度)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2656 [题意] 计算大数递推式 [思路] 高精度 [代码] #include<c ...
- 2656: [Zjoi2012]数列(sequence)(递归+高精度)
好久没写题了T T NOIP 期中考双血崩 显然f(x)=f(x>>1)+f((x>>1)+1),考虑每次往x>>1递归,求出f(x),复杂度O(logN) 我们设 ...
- 洛谷 P2609 [ZJOI2012]数列 解题报告
P2609 [ZJOI2012]数列 题目描述 小白和小蓝在一起上数学课,下课后老师留了一道作业,求下面这个数列的通项公式: A(0)=0 A(1)=1 A(2i)=A(i) (对于任意 i>0 ...
随机推荐
- PropTypes使用
PropTypes防止后期代码传参数错误,所以加一个校验, 代码: import React, {Component,PropTypes} from 'react'; import {View, Te ...
- Redis基本管理
Redis介绍 开源 内存存储 数据结构存储 1.字符串(数字) 2.列表 3.hash 4.set 集合 5.sorted set 有序集合 用途 :数据库 缓存 消息队 ...
- express使用
1.安装express命令 cnpm install express --save 2.使用方法 var express = require('express'); var app = express ...
- Java写xml文件
import java.io.FileOutputStream; import org.dom4j.Document; import org.dom4j.DocumentHelper; import ...
- 【Java】-NO.16.EBook.4.Java.1.002-【疯狂Java讲义第3版 李刚】- 数据类型
1.0.0 Summary Tittle:[Java]-NO.16.EBook.4.Java.1.002-[疯狂Java讲义第3版 李刚]- 数据类型 Style:EBook Series:Java ...
- elasticsearch 处理index 一直INITIALIZING状态
elasticsearch一个节点异常重启后有一个index恢复的过程中状态一直INITIALIZING 处理方法 PUT index_name/_settings { "index&quo ...
- java编写的Http协议的多线程下载器
断点下载器还在实现中...... //////////////////////////////////界面/////////////////////////////////////////// pac ...
- [Java in NetBeans] Lesson 00. Getting Set-up for Learning Java
这个课程的参考视频在youtube. 主要学到的知识点有: set up needs Java SE JDK, NetBeans IDE class name should be the same l ...
- [Java] Header checkBox in Jtable
The reference is from here. 在Jtable里面我们可能会有checkbox, 而有时候我们有很多checkbox需要同时check或者同时uncheck的时候, 如果有一个 ...
- Linux下修改MySQL数据库字符编码为UTF-8解决中文乱码
由于MySQL编码原因会导致数据库出现乱码. 解决办法: 修改MySQL数据库字符编码为UTF-8,UTF-8包含全世界所有国家需要用到的字符,是国际编码. 具体操作: 1.进入MySQL控制台 &g ...