Uva712 S-Trees 【二分思想】【习题6-2】
来源:互联网 发布:怎么样信任软件 编辑:程序博客网 时间:2024/06/12 01:16
题目:S-Trees
题意:给出一棵满二叉树,每一层代表一个01变量,取0时往左走,取1时往右走。 给出所有叶子节点的值,输入要走的路径,问最终走到叶子节点位置的值为多少?
思路:题目给出一些根结点的名称都没有用。
按二分法的思想:
(1)首先将叶子节点的头和尾位置记录下;
(2)然后遍历输入的路径,
0:向左走,尾节点要更新
1:向右走,头节点要更新
每次更新的值为(头+尾)/2的值
最后遍历完路径得出的(头+尾)/2的值即为最终叶子节点的位置
将所有的路径都走完记录位置即为所求。
代码:
#include <iostream>#include <stdio.h>using namespace std;int main(){ int n,kcase=1; char str[10],tree[150],ans[120]; while(scanf("%d",&n)!=EOF && n){ for(int i=0;i<n;i++) scanf("%s",str); scanf("%s",tree); int num; scanf("%d",&num); for(int i=0;i<num;i++){ scanf("%s",str); int head=0,tail= (2<<n-1)-1;//初始位置为叶子节点的头和尾位置 int temp = (head+tail)/2;//用temp记录每次二分的位置 for(int j=0;str[j]!='\0';j++){ if(str[j] == '0') tail = temp;//当为0说明尾位置要改变 else head = temp+1;//为1头位置要改变 temp = (head+tail)/2;//每次求二分位置 } ans[i] = tree[temp];//最后的二分位置即为叶子节点的位置 } ans[num] = '\0'; printf("S-Tree #%d:\n%s\n\n",kcase++,ans); }return 0;}
0 0
- Uva712 S-Trees 【二分思想】【习题6-2】
- UVa712 习题6-2 S树(S-Trees)
- 算法入门经典习题6-2,uva712,S-Trees
- 算法竞赛入门经典 第二版 习题6-2 S树 S-Trees uva712
- 习题6-2 S树 UVa712
- UVA712 S-Trees
- UVA712-S-Trees
- S-Trees UVA712
- uva712 - S-Trees
- UVa712 - S-Trees
- uva712 - S-Trees
- UVA712 - S-Trees
- uva712- S-Trees
- uva712 -- S-Trees
- Uva712——S-Trees
- 习题6-2 S-Trees(树)
- 习题6-2 S-Trees UVA
- S-Trees UVA712(二叉树)
- 观察babel如何把let转化为var实现块级作用域
- POJ 3723 Conscription(构造+最小生成树Kruskal)
- DFS初探
- 查看Android应用包名的全部方法
- javascript 基础 图片库的动态速度与元素生成 2017年1月15日
- Uva712 S-Trees 【二分思想】【习题6-2】
- 问题五十七:怎么用ray tracing画translational sweeping图形
- What is LineageOS ? Everything you need to know about Lineage OS
- codeforces-757-【B、C思维】
- Ansible操作windows主机出现SL3_GET_SERVER_CERTIFICATE:certificate verify failed错误
- 堆内存设置、原理
- caffe.proto 注释理解
- 【LeetCode】 341. Flatten Nested List Iterator
- 浅谈Java中hashCode方法