4135: [FJOI2015]世界树

Time Limit: 15 Sec  Memory Limit: 32 MB
Submit: 25  Solved: 12
[Submit][Status][Discuss]

Description

奥丁杀死的巨人伊米尔后,从伊米尔的尸体上生长出来一株巨大的梣树,它是整个宇宙的核心,被称为世界之树,这个巨木的枝干构成了整个世界,它被神秘的奥术力量所守护。
奥丁发现,世界树的每个节点至多有两棵子树,其蕴含的奥术力量是子树奥术力量的最大值+1,如果一个节点没有子树,其奥术力量为1,这些节点被称为“源”。
世界树在悠长的岁月里形成了奇妙的魔法平衡,具体来说,它的左子树与右子树的奥术力量的差的绝对值不会超过1。若一个节点只有一棵子树(不妨设为左子树),则右子树的奥术力量视为0。
现在奥丁想知道,在n个节点的世界树中,最高和最低的两个“源”(即叶子节点)的深度差最大是多少?

Input

第一行一个整数T,表示数据组数。
以下T行,每行一个整数n表示世界树的节点数。

Output

T行,每行一个整数表示任意两个“源”的奥术力量的差的最大值。

Sample Input

2
5
12345

Sample Output

1
9

HINT

对于100%的数据,1 <= n <= 10^10000, T <= 50

Source

[Submit][Status][Discuss]
一道数学题。。。 苟蒻发现它和斐波那契数列有着一丝丝关系 1 2 3 5 8 13...... 构造最深深度为i的树最少需要f[i]+1个点,同时这棵树也是当前深度深度差最大的 f[i]为第三行斐波那契数列前缀和,当然,数列省略最初两位,具体自行证明 暴力for了一下发现最多也就5W位 苟蒻一开始想着二分。。。但是现在明白,当答案不是很多时完全可以暴力一遍随着点数增多更新当前解 于是便需要排序于是苟蒻WA了。。。。 首先题目给的点数按我的做法是需要-1的 然后。。。重载等号的时候忘记把询问序号一起搞了。。真蠢!

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;const int maxn = 1E4 + 10;struct N{int s,num;short v[maxn];bool operator < (const N &B) const {if (s > B.s) return 0;if (s < B.s) return 1;for (int i = s; i; i--) {if (v[i] < B.v[i]) return 1;if (v[i] > B.v[i]) return 0;}return 0;}bool operator <= (const N &B) const {if (s > B.s) return 0;if (s < B.s) return 1;for (int i = s; i; i--) {if (v[i] < B.v[i]) return 1;if (v[i] > B.v[i]) return 0;}return 1;}N operator + (const N &b) const {N ret;int L = max(s,b.s);int x = 0;for (int i = 1; i <= L; i++) {ret.v[i] = (v[i]+b.v[i]+x) % 10;x = (v[i]+b.v[i]+x)/10;}ret.s = L;if (x) ret.v[L+1] = x,++ret.s;return ret;}N operator = (const N &b) {s = b.s;num = b.num;for (int i = 1; i <= s; i++) v[i] = b.v[i];}
}a,b,sum,q[55],su;char num[maxn];
int ans[55];int main()
{#ifdef YZYfreopen("yzy.txt","r",stdin);#endifa.v[1] = 1;  b.v[1] = 2; sum.v[1] = 3; su.v[1] = 1;a.s = b.s = sum.s = su.s = 1;int n; cin >> n;for (int i = 1; i <= n; i++) {scanf("%s",num);int len = strlen(num);for (int j = len; j; j--) q[i].v[j] = num[len-j]-'0';q[i].s = len;q[i].num = i;int j = 1;for(;;) {if (q[i].v[j] >= 1) {--q[i].v[j];break;}else q[i].v[j] = 9,++j;}if (!q[i].v[len]) --q[i].s;}sort (q+1,q+n+1);int tot = 1;for (int i = 1; i <= n; i++) {while (sum <= q[i]) {su = sum; N c;  c = b;sum = sum+a+b;b = a+b; a = c; ++tot;}ans[q[i].num] = tot/2;if (q[i].v[1] == 5 && q[i].s == 1) ans[q[i].num] = 0;}for (int i = 1; i <= n; i++) printf("%d\n",ans[i]);return 0;
}

4135: [FJOI2015]世界树相关推荐

  1. BZOJ3572: [Hnoi2014]世界树

    题解: 首先建出一颗虚树  对于虚树上的每个节点DP找出离得最近的关键节点的编号和距离 然后考虑一遍dfs 对于每条链上子树 我们倍增找到mid位置 然后mid以下的属于下面节点 mid以上的属于上面 ...

  2. 容斥原理学习(Hdu 4135,Hdu 1796)

    题目链接Hdu4135 Co-prime Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  3. 【fjwc2015】世界树

    [题目描述] 奥丁杀死的巨人伊米尔后,从伊米尔的尸体上生长出来一株巨大的梣树,它是整个宇宙的核心,被称为世界之树,这个巨木的枝干构成了整个世界,它被神秘的奥术力量所守护. 奥丁发现,世界树的每个节点至 ...

  4. BZOJ3572 [Hnoi2014]世界树 【虚树 + 树形dp】

    题目 世界树是一棵无比巨大的树,它伸出的枝干构成了整个世界.在这里,生存着各种各样的种族和生灵,他们共同信奉着绝对公正公平的女神艾莉森,在他们的信条里,公平是使世界树能够生生不息.持续运转的根本基石. ...

  5. HDU 4135 Co-prime 容斥原理

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4135 题目描述: 给你A, B, N, 让你求A到B之间与N互质的数的个数 解题思路: 容斥原理, ...

  6. [2020-11-30 contest]数列(矩阵加速),秘密通道(dijkstra最短路)小X游世界树(换根dp),划分(数学)

    文章目录 数列 solution code 秘密通道 solution code 小X游世界树 solution code 划分 solution code 数列 a[1]=a[2]=a[3]=1 a ...

  7. JZOJ5776. 【NOIP2008模拟】小x游世界树

    题目:[NOIP2008模拟]小x游世界树: 题目的附加题解给的很清楚,这里只给一个代码: 1 #include<iostream> 2 #include<cstdio> 3 ...

  8. JZOJ 5776. 【NOIP2008模拟】小x游世界树

    5776. [NOIP2008模拟]小x游世界树  (File IO): input:yggdrasil.in output:yggdrasil.out Time Limits: 1500 ms  M ...

  9. 容斥 - HDU 4135 Co-prime

    Co-prime Problem's Link:  http://acm.hdu.edu.cn/showproblem.php?pid=4135 推荐: 容斥原理 Mean: 给你一个区间[l,r]和 ...

  10. [题解](树形dp/换根)小x游世界树

    2. 小x游世界树 (yggdrasi.pas/c/cpp) [问题描述] 小x得到了一个(不可靠的)小道消息,传说中的神岛阿瓦隆在格陵兰海的某处,据说那里埋藏着亚瑟王的宝藏,这引起了小x的好奇,但当 ...

最新文章

  1. 汉字验证码和算式验证码
  2. java.lang.ClassNotFoundException: org.codehaus.jackson.JsonProcessingException 异常解决方案
  3. javascript 之反射
  4. 1、集合--相关概述
  5. HDU3634(矩形切割)
  6. flash和linux文件系统,面向大容量Flash的高效Linux文件系统改进和实现
  7. 串口发送通信---UART发送---STM32F4实现
  8. 【英语学习】【Level 08】U01 Let's Read L4 Hot off the press
  9. OpenBSD同步时间
  10. SD-WAN平台ActiveCore推出,领域新亮点精彩丰呈
  11. row_number() over
  12. ASP.NET中EnableViewState
  13. STM32比较器的使用
  14. redis持久化--AOF(九)
  15. 干货分享!简单的python爬取网站数据。
  16. DAMO-YOLO全流程代码解读
  17. 主机ip6容器ip6以及应用ip6
  18. mysql聚合函数查询,子查询,关联查询
  19. Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation之每日一篇
  20. 【云效】——或许也是个人项目管理工具

热门文章

  1. 大数据量查询大杀器之Mybatis 流式查询
  2. 【前端】jQuery上传图片插件 : uploadifive
  3. 黑暗城堡 LibreOJ - 10064(SPFA)
  4. RabbitMQ之管理与监控
  5. 《DFS》《剪枝》Problem C. 买蛋糕
  6. python笔记本好_如何使用 Python 分析笔记本电脑上的 100 GB 数据
  7. 软件测试系列——冒烟测试
  8. Advised,Advisor,Advice,Pointcut
  9. ping的通百度但是浏览器打不开的解决方法
  10. 苹果app没删但是桌面找不到