4135: [FJOI2015]世界树
4135: [FJOI2015]世界树
Time Limit: 15 Sec Memory Limit: 32 MB
Submit: 25 Solved: 12
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
5
12345
Sample Output
9
HINT
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]世界树相关推荐
- BZOJ3572: [Hnoi2014]世界树
题解: 首先建出一颗虚树 对于虚树上的每个节点DP找出离得最近的关键节点的编号和距离 然后考虑一遍dfs 对于每条链上子树 我们倍增找到mid位置 然后mid以下的属于下面节点 mid以上的属于上面 ...
- 容斥原理学习(Hdu 4135,Hdu 1796)
题目链接Hdu4135 Co-prime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- 【fjwc2015】世界树
[题目描述] 奥丁杀死的巨人伊米尔后,从伊米尔的尸体上生长出来一株巨大的梣树,它是整个宇宙的核心,被称为世界之树,这个巨木的枝干构成了整个世界,它被神秘的奥术力量所守护. 奥丁发现,世界树的每个节点至 ...
- BZOJ3572 [Hnoi2014]世界树 【虚树 + 树形dp】
题目 世界树是一棵无比巨大的树,它伸出的枝干构成了整个世界.在这里,生存着各种各样的种族和生灵,他们共同信奉着绝对公正公平的女神艾莉森,在他们的信条里,公平是使世界树能够生生不息.持续运转的根本基石. ...
- HDU 4135 Co-prime 容斥原理
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4135 题目描述: 给你A, B, N, 让你求A到B之间与N互质的数的个数 解题思路: 容斥原理, ...
- [2020-11-30 contest]数列(矩阵加速),秘密通道(dijkstra最短路)小X游世界树(换根dp),划分(数学)
文章目录 数列 solution code 秘密通道 solution code 小X游世界树 solution code 划分 solution code 数列 a[1]=a[2]=a[3]=1 a ...
- JZOJ5776. 【NOIP2008模拟】小x游世界树
题目:[NOIP2008模拟]小x游世界树: 题目的附加题解给的很清楚,这里只给一个代码: 1 #include<iostream> 2 #include<cstdio> 3 ...
- JZOJ 5776. 【NOIP2008模拟】小x游世界树
5776. [NOIP2008模拟]小x游世界树 (File IO): input:yggdrasil.in output:yggdrasil.out Time Limits: 1500 ms M ...
- 容斥 - HDU 4135 Co-prime
Co-prime Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=4135 推荐: 容斥原理 Mean: 给你一个区间[l,r]和 ...
- [题解](树形dp/换根)小x游世界树
2. 小x游世界树 (yggdrasi.pas/c/cpp) [问题描述] 小x得到了一个(不可靠的)小道消息,传说中的神岛阿瓦隆在格陵兰海的某处,据说那里埋藏着亚瑟王的宝藏,这引起了小x的好奇,但当 ...
最新文章
- 汉字验证码和算式验证码
- java.lang.ClassNotFoundException: org.codehaus.jackson.JsonProcessingException 异常解决方案
- javascript 之反射
- 1、集合--相关概述
- HDU3634(矩形切割)
- flash和linux文件系统,面向大容量Flash的高效Linux文件系统改进和实现
- 串口发送通信---UART发送---STM32F4实现
- 【英语学习】【Level 08】U01 Let's Read L4 Hot off the press
- OpenBSD同步时间
- SD-WAN平台ActiveCore推出,领域新亮点精彩丰呈
- row_number() over
- ASP.NET中EnableViewState
- STM32比较器的使用
- redis持久化--AOF(九)
- 干货分享!简单的python爬取网站数据。
- DAMO-YOLO全流程代码解读
- 主机ip6容器ip6以及应用ip6
- mysql聚合函数查询,子查询,关联查询
- Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation之每日一篇
- 【云效】——或许也是个人项目管理工具