洛谷 P2609 [ZJOI2012]数列 解题报告
P2609 [ZJOI2012]数列
题目描述
小白和小蓝在一起上数学课,下课后老师留了一道作业,求下面这个数列的通项公式:
A(0)=0
A(1)=1
A(2i)=A(i) (对于任意 i>0)
A(2i+1)=A(i)+A(i+1) (对于任意 i>0)
小白作为一个数学爱好者,很快就计算出了这个数列的通项公式。于是,小白告诉小蓝自己已经做出来了,但为了防止小蓝抄作业,小白并不想把公式公布出来。于是小白为了向小蓝证明自己的确做出来了此题以达到其炫耀的目的,想出了一个绝妙的方法:即让小蓝说一个正整数N,小白则说出 的值,如果当N很大时小白仍能很快的说出正确答案,这就说明小白的确得到了公式。但这个方法有一个很大的漏洞:小蓝自己不会做,没法验证小白的答案是否正确。作为小蓝的好友,你能帮帮小蓝吗?
输入输出格式
输入格式:
输入文件第一行有且只有一个正整数T,表示测试数据的组数。
第2~T+1行,每行一个非负整数N。
输出格式:
输出文件共包含T行。
第i行应包含一个不含多余前缀0的数,它的值应等于 (n为输入数据中第i+1行被读入的整数)
说明
对于20%的数据,N<=10^8
对于50%的数据,N<=10^12
对于100%的数据,T<=20,N<=10^100
说实话,我觉得好迷。。
胡乱推了推没搞出来。。
发现直接暴力记搜就可以了,发现每层出现的不一样的数非常少,是常数级别的
我们可以直接高精,记搜用个map搞一搞
复杂度:\(O(Tlog_{10}N(loglogN+logN))\)
对应数据组数,比较或者运算复杂度,map的复杂度和运算次数
(我瞎扯的
Code:
#include <cstdio>
#include <cstring>
#include <map>
using namespace std;
const int N=102;
struct l_num
{
int num[N];
l_num()
{
memset(num,0,sizeof(num));
}
l_num(char c[])
{
memset(num,0,sizeof(num));
num[0]=strlen(c);
for(int i=1;i<=num[0];i++)
num[i]=c[num[0]-i]-'0';
}
bool friend operator <(l_num n1,l_num n2)
{
if(n1.num[0]==n2.num[0])
{
int pos=n1.num[0];
while(pos&&n1.num[pos]==n2.num[pos]) --pos;
return n1.num[pos]<n2.num[pos];
}
return n1.num[0]<n2.num[0];
}
l_num friend operator /(l_num n,int k)
{
for(int i=n.num[0];i>1;i--)
{
if(n.num[i]&1) n.num[i-1]+=10;
n.num[i]>>=1;
}
n.num[1]>>=1;
n.num[1]+=k;
if(!n.num[n.num[0]]) --n.num[0];
return n;
}
l_num friend operator +(l_num n1,l_num n2)
{
l_num n3;
n3.num[0]=max(n1.num[0],n2.num[0]);
for(int i=1;i<=n3.num[0];i++)
{
n3.num[i]+=n1.num[i]+n2.num[i];
n3.num[i+1]=n3.num[i]/10;
n3.num[i]%=10;
}
if(n3.num[n3.num[0]+1]) ++n3.num[0];
return n3;
}
}zero,one;
map <l_num,l_num> a;
l_num dfs(l_num k)
{
if(!k.num[0]) return zero;
if(k.num[0]==1&&k.num[1]==1) return one;
if(a.find(k)!=a.end()) return a[k];
if(k.num[1]&1) a[k]=dfs(k/0)+dfs(k/1);
else a[k]=dfs(k/0);
return a[k];
}
int main()
{
int t;char s[N];
scanf("%d",&t);
one.num[0]=one.num[1]=1;
zero.num[0]=0;
while(t--)
{
scanf("%s",s);
l_num rk(s);
l_num ans=dfs(rk);
for(int i=ans.num[0];i;i--)
printf("%d",ans.num[i]);
printf("\n");
}
return 0;
}
2018.9.3
洛谷 P2609 [ZJOI2012]数列 解题报告的更多相关文章
- 洛谷 P1415 拆分数列 解题报告
拆分数列 题目背景 [为了响应党中央勤节俭.反铺张的精神,题目背景描述故事部分略去^-^] 题目描述 给出一列数字,需要你添加任意多个逗号将其拆成若干个严格递增的数. 如果有多组解,则输出使得最后一个 ...
- 洛谷 P2597 [ZJOI2012]灾难 解题报告
P2597 [ZJOI2012]灾难 题目描述 阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,如果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引发 ...
- 洛谷 P2173 [ZJOI2012]网络 解题报告
P2173 [ZJOI2012]网络 题目描述 有一个无向图G,每个点有个权值,每条边有一个颜色.这个无向图满足以下两个条件: 对于任意节点连出去的边中,相同颜色的边不超过两条. 图中不存在同色的环, ...
- 洛谷 P4597 序列sequence 解题报告
P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...
- 洛谷 P1783 海滩防御 解题报告
P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...
- 洛谷1087 FBI树 解题报告
洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...
- 洛谷 P2467 地精部落 解题报告
P2467 [SDOI2010]地精部落 题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为\(N\)的山脉\(H\)可分为从左到右的\(N ...
- 洛谷 P3349 [ZJOI2016]小星星 解题报告
P3349 [ZJOI2016]小星星 题目描述 小\(Y\)是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有\(n\)颗小星星,用\(m\)条彩色的细线串了起来,每条细线连着两颗小星星. 有一 ...
- 洛谷 P3177 树上染色 解题报告
P3177 [HAOI2015]树上染色 题目描述 有一棵点数为\(N\)的树,树边有边权.给你一个在\(0\) ~ \(N\)之内的正整数\(K\),你要在这棵树中选择\(K\)个点,将其染成黑色, ...
随机推荐
- Python线程创建与使用
Python多为线程编程提供了两个简单明了的模块:thread和threading,Python3中已经不存thread模块,已经被改名为_thread,实际优先使用 threading模块. 1.P ...
- LeetCode-177:第N高的薪水
第N高的薪水与第二高的薪水,解题思路是一样的,只要对LeetCode-176的SQL做一下变形,便可以满足这题,详见:https://www.cnblogs.com/zouqf/p/10282392. ...
- MySQL工作经验
以下是根据工作中遇到各种场景用到的一些Mysql用法,比较实用,基本是语法之外的一些东西. 修改账户密码 1.打开Mysql控制台,输入原密码: 2.输入以下语法:mysql> set pass ...
- MySQL选择的执行计划性能底下原因分析--实战案例分析
MySQL是自动会选择它认为好的执行划,但是MySQL毕竟是程序,还没有达到像人类思考这么智能,还是通过一些按部就班的算法实现最优执行计划(基于cost)的选择.下面就是一个真实的案例,带你来看看My ...
- VMware运行时“内部错误”的解决方法
解决方法:打开虚拟机实体目录,如下:发现有两个虚拟机配置文件,一个文件大小为4KB,另一个为空.现在虚拟机默认使用为空的配置文件了. 将大小为空的虚拟机配置文件删除掉,然后将另一个配置文件重名命. 接 ...
- python核心编程2 第八章 练习
8–2. 循环. 编写一个程序, 让用户输入三个数字: (f)rom, (t)o, 和 (i)ncrement . 以 i为步长, 从 f 计数到 t , 包括 f 和 t . 例如, 如果输入的是 ...
- 图解HTTP总结(7)——确保Web安全的HTTPS
HTTP 主要有这些不足, 例举如下. 通信使用明文( 不加密) , 内容可能会被窃听. 不验证通信方的身份, 因此有可能遭遇伪装. 无法证明报文的完整性, 所以有可能已遭篡改 ...
- attention发展历史及其相应论文
这个论文讲述了attention机制的发展历史以及在发展过程的变体-注意力机制(Attention Mechanism)在自然语言处理中的应用 上面那个论文提到attention在CNN中应用,有一个 ...
- 【Kaggle】泰坦尼克号
引言 Kaggle官方网站 这是泰坦尼克号事件的基本介绍: 我们需要做的就是通过给出的数据集,通过对特征值的分析以及运用机器学习模型,分析什么样的人最可能存活,并给出对测试集合的预测. 对于Kaggl ...
- Django自带后台管理配置
Django自带后台管理的配置 创建项目和应用 修改配置文件 数据库配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql' ...