BZOJ2656 [Zjoi2012]数列
Description
小白和小蓝在一起上数学课,下课后老师留了一道作业,求下面这个数列的通项公式:
$$\begin{aligned}
A_0 &= 0\\
A_1 &= 1\\
A_{2i} &= A_i\\
A_{2i+1} &= A_i + A_{i+1}
\end{aligned}$$
小白作为一个数学爱好者,很快就计算出了这个数列的通项公式。于是,小白告诉小蓝自己已经做出来了,但为了防止小蓝抄作业,小白并不想把公式公布出来。于是小白为了向小蓝证明自己的确做出来了此题以达到其炫耀的目的,想出了一个绝妙的方法:即让小蓝说一个正整数N,小白则说出 的值,如果当N很大时小白仍能很快的说出正确答案,这就说明小白的确得到了公式。但这个方法有一个很大的漏洞:小蓝自己不会做,没法验证小白的答案是否正确。作为小蓝的好友,你能帮帮小蓝吗?
Input
输入文件第一行有且只有一个正整数,表示测试数据的组数。
第2~T+1行,每行一个非负整数N
Output
输出文件共包含T行。
第i行应包含一个不含多余前缀0的数,它的值应等于An(n为输入数据中第i+1行被读入的整数)
Sample Input
1
3
10
Sample Output
2
3
题解
手算几组小数据可以发现(也可以证明)在展开k次之后一定会得到$$xA_{\lfloor n/2^k \rfloor}+yA_{\lfloor n/2^k \rfloor+1}$$的形式,并且若
$$A_n = uA_i + vA_{i+1}$$,那么:
若i是偶数,则
$$A_n = (u+v)A_{i/2} + vA_{i/2+1}$$
若i是奇数,则
$$A_n = uA_{i/2} + (u+v)A_{i/2+1}$$
高精搞一搞即可。
代码:
#include <algorithm>
#include <cstdio>
#include <cstring>
const int N = 105;
int A[N], B[N], C[N];
char s[105];
void div2() {
for (int i = A[0]; i; --i) {
if (i && (A[i] & 1)) A[i - 1] += 10;
A[i] >>= 1;
}
while (A[0] && !A[A[0]]) --A[0];
}
void add(int *a, int *b) {
int t = 0;
for (int i = 1; i <= b[0] || t; ++i) {
t = (a[i] += b[i] + t) / 10;
a[i] %= 10;
}
a[0] = std::max(a[0], b[0]);
while (a[a[0] + 1]) ++a[0];
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
scanf("%s", s);
if (!strcmp(s, "0")) {
puts("0");
continue;
}
A[0] = strlen(s);
for (int i = 0; i < A[0]; ++i)
A[A[0] - i] = s[i] - '0';
memset(B, 0, sizeof B);
memset(C, 0, sizeof C);
B[0] = B[1] = 1;
while (A[0]) {
if (A[1] & 1) add(C, B);
else add(B, C);
div2();
}
for (int i = C[0]; i; --i)
putchar(C[i] + '0');
putchar('\n');
}
return 0;
}
BZOJ2656 [Zjoi2012]数列的更多相关文章
- bzoj2656 [Zjoi2012]数列(sequence)
题目链接 好久没写高精度了,调了很久QAQ 如果直接递归计算答案的话肯定会T 发现一个数不管是分成一奇一偶还是直接>>1,都会重复计算很多东西 我们只需要在递归的时候实时维护一个xx(an ...
- 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 ...
- 洛谷 P2609 [ZJOI2012]数列 解题报告
P2609 [ZJOI2012]数列 题目描述 小白和小蓝在一起上数学课,下课后老师留了一道作业,求下面这个数列的通项公式: A(0)=0 A(1)=1 A(2i)=A(i) (对于任意 i>0 ...
- 【bzoj2656】[Zjoi2012]数列(sequence) 高精度
题目描述 给出数列 $A$ 的递推公式如下图所示,$T$ 次给定 $n$ ,求 $A_n$ . 输入 输入文件第一行有且只有一个正整数T,表示测试数据的组数.第2-T+1行,每行一个非负整数N. 输出 ...
- [BZOJ 2656][ZJOI2012]数列(递归+高精度)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2656 分析: 很容易想到递归分治,但遇到奇数时候f[i]=f[i/2]+f[i/2+1 ...
- bzoj 2656 [Zjoi2012]数列(sequence)(高精度)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2656 [题意] 计算大数递推式 [思路] 高精度 [代码] #include<c ...
随机推荐
- 阿里巴巴前端面试分享-社招(p6)
借鉴了朋友的阿里面试经:(社招前端2年经验) 电话面 简单自我介绍, 做过哪些项目, 使用哪些技术栈 ? 如何看待前端框架选型 ? vue的如何实现双向绑定的 ? react 虚拟DOM 是什么? 如 ...
- Centos7.4下安装Redis5.0
一.下载Redis Redis下载地址:https://redis.io/download 二.安装依赖包 安装Redis之前需要安装c++命令 yum install gcc-c++ 三.上传并解压 ...
- Linux服务器核心参数配置
使用Linux作为长连接的web服务器时,为了增加服务的容量,以及处理性能,需要修改一些参数. 一.多进程绑定CPU 1.使用taskset命令可以绑定进程到指定CPU,以减少多核CPU环境中,单进程 ...
- 任务调度SpringTask
一.什么是任务调度 在企业级应用中,经常会制定一些“计划任务”,即在某个时间点做某件事情,核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作.常见的任务调度框架有Quartz和Spri ...
- poj3250 Bad Hair Day 单调栈(递减)
Bad Hair Day Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 24420 Accepted: 8292 Des ...
- xilinx DMA IP核(一) —— loop测试 代码注释
本篇笔记中的代码来自:米联科技的教程“第三季第一篇的DMA_LOOP环路测试” 硬件的连接如下图所示: 图:DMA Loop Block Design 橘色的线就是DMA加FIFO组成的一个LOOP循 ...
- Mac 10.12安装飞鸽传书IPMessager
说明:这个版本的飞鸽传书不能和Linux的互通,但是可以和Windows的互通,我猜测是协议问题:如果想要互通只能是Mac和Linux同时安装iptux. 下载: (链接: https://pan.b ...
- (转)nginx+iis实现负载均衡
最近在研究分布式系统架构方面的知识,包括负载均衡,数据库读写分离,分布式缓存redis等.本篇先从负载均衡服务架构入手,关于负载均衡百度百科的定义如下:负载均衡,英文名称为Load Balance,其 ...
- normalize.css源码解析
什么是normalize.css? 它是为了帮助我们统一各个浏览器的样式和消除bug的css库. 为什么需要normalize.css,有什么好处? 不像一些reset.css,normalize. ...
- java处理数据库的CRUD
package com.lhy.jdbc.util; import java.sql.Connection; import java.sql.PreparedStatement; import jav ...