【BZOJ 2656】2656: [Zjoi2012]数列(sequence) (高精度)
2656: [Zjoi2012]数列(sequence)
Time Limit: 2 Sec Memory Limit: 128 MB
Submit: 1499 Solved: 786Description
小白和小蓝在一起上数学课,下课后老师留了一道作业,求下面这个数列的通项公式:
小白作为一个数学爱好者,很快就计算出了这个数列的通项公式。于是,小白告诉小蓝自己已经做出来了,但为了防止小蓝抄作业,小白并不想把公式公布出来。于是小白为了向小蓝证明自己的确做出来了此题以达到其炫耀的目的,想出了一个绝妙的方法:即让小蓝说一个正整数N,小白则说出 的值,如果当N很大时小白仍能很快的说出正确答案,这就说明小白的确得到了公式。但这个方法有一个很大的漏洞:小蓝自己不会做,没法验证小白的答案是否正确。作为小蓝的好友,你能帮帮小蓝吗?
Input
输入文件第一行有且只有一个正整数T,表示测试数据的组数。
第2~T+1行,每行一个非负整数N。
Output
输出文件共包含T行。
第i行应包含一个不含多余前缀0的数,它的值应等于An(n为输入数据中第i+1行被读入的整数)
【样例输入】
Sample Input
31
3
10
Sample Output
1
2
3HINT
T<=20,N<=10^100
Source
【分析】
就是可以直接高精度暴力的。因为每次最多分出两个数而已。
比如:
$25→12,13→6,7→3,4→1,2→0,1$
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; int mymax(int x,int y) {return x>y?x:y;} struct hugeint
{
int a[],l;
void clear()
{
memset(a,,sizeof(a));
l=;
}
friend hugeint operator + (hugeint x,hugeint y)
{
int ll=mymax(x.l,y.l);
for(int i=;i<=ll;i++) x.a[i]=x.a[i]+y.a[i];
for(int i=;i<=ll;i++) x.a[i+]+=x.a[i]/,x.a[i]%=;
while(x.a[ll+]!=) x.a[ll+]+=x.a[ll+]/,x.a[ll+]%=,ll++;
x.l=ll;
return x;
}
friend hugeint operator + (hugeint x,int y)
{
int ll=x.l; x.a[]+=y;
for(int i=;i<=ll;i++) x.a[i+]+=x.a[i]/,x.a[i]%=;
while(x.a[ll+]!=) x.a[ll+]+=x.a[ll+]/,x.a[ll+]%=,ll++;
x.l=ll;
return x;
}
friend hugeint operator / (hugeint x,int y)
{
int nw=;
for(int i=x.l;i>=;i--)
{
nw=nw*+x.a[i];
x.a[i]=nw/y;
nw%=y;
}
while(x.a[x.l]==&&x.l>) x.l--;
return x;
}
}; hugeint k1,k2;
void dfs(hugeint xx)
{
if(xx.l==&&xx.a[]==)
{
k1=xx;k2.clear();
return;
}
dfs((xx+)/);
if(xx.a[]&) k1=k1+k2;
else k2=k1+k2;
} char s[]; int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%s",s+);
int l=strlen(s+);
hugeint xx;xx.clear();
for(int i=;i<=l;i++) xx.a[l-i+]=s[i]-'';
xx.l=l;
dfs(xx);
for(int i=k1.l;i>=;i--) printf("%d",k1.a[i]);
printf("\n");
}
return ;
}
【BZOJ 2656】2656: [Zjoi2012]数列(sequence) (高精度)的更多相关文章
- 【bzoj2656】[Zjoi2012]数列(sequence) 高精度
题目描述 给出数列 $A$ 的递推公式如下图所示,$T$ 次给定 $n$ ,求 $A_n$ . 输入 输入文件第一行有且只有一个正整数T,表示测试数据的组数.第2-T+1行,每行一个非负整数N. 输出 ...
- bzoj 2656 [Zjoi2012]数列(sequence) 递推+高精度
2656: [Zjoi2012]数列(sequence) Time Limit: 2 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Descri ...
- [BZOJ2656][codevs1207][Zjoi2012]数列(sequence)
[BZOJ2656][codevs1207][Zjoi2012]数列(sequence) 试题描述 小白和小蓝在一起上数学课,下课后老师留了一道作业,求下面这个数列的通项公式: 小白作为一个数学爱好者 ...
- 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) 我们设 ...
- bzoj2656 [Zjoi2012]数列(sequence)
题目链接 好久没写高精度了,调了很久QAQ 如果直接递归计算答案的话肯定会T 发现一个数不管是分成一奇一偶还是直接>>1,都会重复计算很多东西 我们只需要在递归的时候实时维护一个xx(an ...
- BZOJ2656 [Zjoi2012]数列(sequence)[模拟]
这个递推式子可以发现$i$是偶数下标可以缩一半,是奇数下标就可以拆成两个下标,$\lfloor \frac{i}{2} \rfloor$以及$\lfloor \frac{i}{2}+1 \rfloor ...
- 洛谷 P2609 [ZJOI2012]数列 解题报告
P2609 [ZJOI2012]数列 题目描述 小白和小蓝在一起上数学课,下课后老师留了一道作业,求下面这个数列的通项公式: A(0)=0 A(1)=1 A(2i)=A(i) (对于任意 i>0 ...
- [BZOJ 2656][ZJOI2012]数列(递归+高精度)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2656 分析: 很容易想到递归分治,但遇到奇数时候f[i]=f[i/2]+f[i/2+1 ...
随机推荐
- 【CodeForces】899 F. Letters Removing
[题目]F. Letters Removing [题意]给定只含小写字母.大写字母和数字的字符串,每次给定一个范围要求删除[l,r]内的字符c(l和r具体位置随删除变动),求m次操作后的字符串.n&l ...
- Sqlmap注入技巧收集整理
TIP1 当我们注射的时候,判断注入 http://site/script?id=10http://site/script?id=11-1 # 相当于 id=10http://site/script? ...
- tp修改的写法
- 四. Jmeter--JDBC 请求
一, SQLserver 1.下载 JDBC Driver (sqljdbc_6.0.8112.100_enu.exe) https://www.microsoft.com/en-us/downlo ...
- python基础===猴子补丁
>>> class test: def A(self, x, y): return x+y >>> t = test() >>> t.A(10,2 ...
- redis的备份恢复
说明:默认rdb方式保存,redis支持主从和哨兵等,但是在某些情况下我们会单机跑,所以有时候我们就会需要设计到备份恢复 环境:原始redis:192.168.1.200 新redis:192.168 ...
- 链接 DB App.config 解析
<?xml version="1.0" encoding="utf-8"?><configuration> <startup> ...
- Lynx以纯文本的形式下载网页
Lynx是一款基于命令行的web浏览器 [root@test88 ~]# yum install lynx -y [root@test88 ~]# lynx www.baidu.com 以纯文本的形式 ...
- 次短路经(dijsktra)
#include <cstdio>#include <cstring>#include <queue>#include <algorithm>#defi ...
- poj 1077(BFS预处理+康托展开)
Eight Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 29935 Accepted: 13029 Special ...
