UVA - 122 Trees on the level Map
来源:互联网 发布:java 文件名中文乱码 编辑:程序博客网 时间:2024/05/21 06:39
题目大意:给出一些字符串表示二叉树,字符串的格式如下(n,s),n表示节点上的数,s表示该节点在哪个位置,问这些字符串能否组成二叉树
解题思路:能否组成二叉树,首先需要判断根节点。
接着判断一下其他节点,按层次遍历的顺序来枚举,所以要先排序,按字符串的长度来排序。
如果该节点能是二叉树的节点,那么他的父节点就要存在
判断他的父节点是否存在,只需判断他的前len-1(len表示长度)个字符组成的串是否存在
这题注意要判重
#include<cstdio>#include<cstring>#include<algorithm>#include<map>#include<string>using namespace std;#define maxn 266struct Node{ int num, len; char str[maxn];}N[maxn];int ans[maxn], cnt;bool solve() { int count = 0, M = 1, start = 0; map<string,int> Map; if(N[0].len != 1) { return false; } else { ans[count++] = N[0].num; start = 1; } for(int i = start; i < cnt; i++) { if(N[i].len == 1) return false; string t; if(N[i].len == 2) { string t; t += N[i].str[0]; if(Map[t]) return false; Map[t] = M++; ans[count++] = N[i].num; continue; } for(int j = 0; j < N[i].len - 2; j++) t += N[i].str[j]; if(Map[t]) ans[count++] = N[i].num; else return false; t += N[i].str[N[i].len - 2]; if(Map[t]) return false; Map[t] = M++; } return true;}bool cmp(const Node a, const Node b) { if(a.len == b.len) return strcmp(b.str,a.str) > 0; else return a.len < b.len;}int main() { char str[maxn]; while(scanf("%s", str) != EOF) { cnt = 0; if(strcmp(str,"()") == 0) break; sscanf(str,"(%d,%s)", &N[cnt].num,N[cnt].str); N[cnt].len = strlen(N[cnt].str); cnt++; while(scanf("%s", str) != EOF) { if(strcmp(str,"()") == 0) break; sscanf(str,"(%d,%s)", &N[cnt].num, N[cnt].str); N[cnt].len = strlen(N[cnt].str); cnt++; } sort(N, N + cnt, cmp); if(solve()) { printf("%d", ans[0]); for(int i = 1; i < cnt; i++) printf(" %d", ans[i]); } else printf("not complete"); printf("\n"); } return 0;}
0 0
- UVA - 122 Trees on the level Map
- UVa Problem 122 - Trees on the level
- UVA 122 - Trees on the level
- uva 122 - Trees on the level
- uva 122 Trees on the level
- UVA-122-Trees on the level
- UVA - 122 Trees on the level
- UVa 122 - Trees on the level
- UVa 122 - Trees on the level
- Uva 122 Trees on the level
- UVA - 122 Trees on the level
- UVa 122 - Trees on the level
- Uva - 122 - Trees on the level
- uva 122 - Trees on the level
- UVa 122 Trees on the level
- uva 122 Trees on the level
- UVa 122 - Trees on the level
- UVa 122 Trees on the level
- js事件委托及其原理
- ARC之Outlet与弱引用
- 利用adb对android手机进行远程截图/截屏
- [Hadoop]基于Eclipse的Hadoop应用开发环境配置
- POJ 3616 Milking Time
- UVA - 122 Trees on the level Map
- C Primer Plus 第十二章课后习题……2015.5.10
- ARC之对象转型
- P2P流媒体开源项目介绍
- Ubuntu中Nginx的安装与配置
- ARC总结
- poj1053
- Android学习MediaRecorder和MediaPlayer
- 设计模式(11)——享元(Flyweight)模式