洛谷P1087 FBI树
2021/10/15 23:16:46
本文主要是介绍洛谷P1087 FBI树,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 题目
- 思路
- AC代码
- 后言
题目
添加链接描述
思路
其实这个树很简单,就是一个满二叉树,我们利用父亲结点是i左结点是2* i右节点是2*i+1来存储。就与data信息是字符串所以我利用了一个结构体Node来存储相应信息。存储之后还要对剩余的叶子结点进行处理,就是将叶子结点作为data存入结构体中,便于写递归。
AC代码
#include <bits/stdc++.h> using namespace std; struct Node { string left, right, data; } I[3000]; void creat_tree(string s, int node) { if (s.size() == 1) return; I[node].data = s; I[node].left = s.substr(0, s.size() / 2); creat_tree(I[node].left, node * 2); I[node].right = s.substr(s.size() / 2); creat_tree(I[node].right, node * 2 + 1); } string res(string s) { if (s.find("0") == -1) return "I"; else if (s.find("1") == -1) return "B"; else return "F"; } void dfs(int start, int end) { if ((I[start].data).size() != 1) { dfs(2 * start, 2 * start + (end - start) / 2); dfs(2 * start + 1, 2 * start + 1 + (end - start) / 2); } cout << res(I[start].data); } int main() { int N; cin >> N; string s; cin >> s; if (N == 0) { cout << res(s); return 0; } creat_tree(s, 1); int root = pow(2, N); for (int i = 1; i < root; ++i) { if ((I[i].data).size() == 2) { I[2 * i].data = I[i].left; I[2 * i + 1].data = I[i].right; } } dfs(1, root); }
后言
泪目啊家人们,一个多月终于对递归开了点窍!!!!
这篇关于洛谷P1087 FBI树的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南
- 2024-09-30Dnd-Kit学习:新手快速入门指南