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 ...
随机推荐
- 小程序支持连Wi-Fi,代码包到4M
小程序又开发新能力了:1 更多硬件连接功能等着你.在商场等场所,用户以往要用微信连Wi-Fi,要扫二维码并关注公众号,点击菜单里的“连Wi-Fi”才能使用上网络.连个Wi-Fi何必让用户经过两道坎? ...
- OC仿支付宝输入UITextField输入车牌号
效果图,如果使用,出现任何问题请告知,或者下方留言,我好以及改正 .h文件: #import <UIKit/UIKit.h> @interface LicenseKeyBoardView ...
- 对比库表结构,生成SQL
网上找了一圈对比库的工具,能手工生成差别的SQL的工具没有,改造了一下网上的sql 1, 获取字段名的类型 create FUNCTION [dbo].[getColType](@tab varcha ...
- 配置AlwaysON出错
在其中一个集群节点的SQL Server中验证各节点的投票数 ,在其中一个集群节点的SQL Server上执行使用下面SQL语句 SELECT * FROM sys.dm_hadr_cluster_m ...
- Python3学习之路~6.3 类变量 VS 实例变量
类变量 VS 实例变量 #Author:Zheng Na # 实例里面可以查询.增加.删除.修改实例变量 class Role: # 类名 # 类变量 name = '我是类name' n=1 n_l ...
- 下载apk安装包后,调用安装器自动安装apk(适配7.0)
在更新操作时,下载新apk之后,往往需要自动安装新apk,用以下代码即可安装下载在本地的apk文件(apkFile) Intent intent = new Intent(); intent.setA ...
- [LeetCode] 581. Shortest Unsorted Continuous Subarray_Easy tag: Sort, Stack
Given an integer array, you need to find one continuous subarray that if you only sort this subarray ...
- Nodejs基础(5-6)HTTP概念进阶
1.什么是回调? 是异步编程最基本的方法,对于nodejs来说需要按顺序执行异步逻辑的时候一般采用后续传递的方式,也就是将后续逻辑封装在回调函数中作为起始函数的参数逐层去嵌套.通过这种方式来让程序按照 ...
- Go断后,Dart冲前,Google的野心
今天,我要讲讲新的前端web语言-Dart 我是网上看到这段话,激起了兴趣,虽然我不能算是真正的web前端从业者!哈哈 [ Dart语言由谷歌制造,用来替代Javascript,弥补Javascrip ...
- usermod命令详解
转载自:http://blog.51cto.com/urchin/987186 usermod - 修改用户帐户信息 modify a user account usermod [options] u ...