trie树(静态建树)
来源:互联网 发布:淘宝怎么问卖家问题 编辑:程序博客网 时间:2024/04/29 03:02
poj1002
题意:输入一个字符串,除去空格后映射成一个7位数的数字串。判断字符是否有重复,如果有则输出字串及字串重复的个数,如果没有则输出"No duplicates."(这里要注意Q和Z都没映射,则为0)。
题解:判重,可以将处理后的n个7位数字串用qsort处理,或者用trie数加dfs(其中用val[]值保存出现改字串的个数)。
#include <iostream>#include <string.h>#include <cstdio>using namespace std;int trie[1000005][10];int val[1000005];int sz;int cnt[100005];char ans[100005][10];int res;void Init() { memset(trie[0], 0, sizeof(trie[0][10])); sz = 1;}int Index(char c){ if(c == 'A' || c == 'B' || c == 'C') return 2; else if(c == 'D' || c == 'E' || c == 'F') return 3; else if(c == 'G' || c == 'H' || c == 'I') return 4; else if(c == 'J' || c == 'K' || c == 'L') return 5; else if(c == 'M' || c == 'N' || c == 'O') return 6; else if(c == 'P' || c == 'R' || c == 'S') return 7; else if(c == 'T' || c == 'U' || c == 'V') return 8; else if(c == 'W' || c == 'X' || c == 'Y') return 9; else if(c >= '0' && c <= '9') return c-'0'; else if(c == 'Q' || c == 'Z') return 0;}void Insert(int root, char *data) { int len = strlen(data); int u = root; for(int i = 0; i < len; i ++){ if(data[i] == '-') continue; int ch = Index(data[i]); if(trie[u][ch] == 0){ memset(trie[sz], 0, sizeof(trie[sz])); trie[u][ch] = sz; val[sz] = 0; sz ++; } u = trie[u][ch]; } val[u] ++;}void print_word(char *temp, int num, int root){ for(int i = 0; i < num; i ++) ans[res][i] = temp[i]; cnt[res] = val[root]; res ++;}void dfs(int root, char *temp, int num){ if(val[root] > 0) print_word(temp, num, root); for(int i = 0; i < 10; i ++){ if(trie[root][i] != 0){ temp[num] = i + '0'; dfs(trie[root][i], temp, num+1); } }}void Traverse(int root){ char temp[10005]; dfs(0, temp, 0);}int main(){ int t; char data[1000]; scanf("%d", &t); Init(); for(int i = 0; i < t; i ++){ scanf("%s", data); Insert(0, data); } res = 0; Traverse(0); // cout << res << endl; int flag = 0; for(int i = 0; i < res; i ++) if(cnt[i] > 1) { for(int j = 0; j < strlen(ans[i]); j ++){ if(j == 3) printf("-%c", ans[i][j]); else printf("%c", ans[i][j]); } printf(" %d\n", cnt[i]); flag = 1; } if(flag == 0) printf("No duplicates.\n"); // 没有两个是相同的 return 0;}
0 0
- trie树(静态建树)
- Trie树静态建树模板
- trie动态建树与静态建树
- BST 二叉搜索树 (动态建树与静态建树)
- 字典树 静态建树与动态建树
- Light OJ 1129 Trie树 动态建树
- hiho-1014 Trie树 (Trie的建树与查询)
- 【POJ】3630 - Phone List(字典树(静态建树))
- hihoCoder #1014 : Trie树 使用递归建树的方法
- HDU 1671 静态trie(字典树)
- pat L3-010是否完全二叉搜索树(静态建树 层次遍历)@
- pku 3630(静态trie树)
- nyoj 163 Phone List && poj 3630 Phone List <字典树 动态建树&&静态建树>
- 线段树(建树,查询)
- JD 1009:二叉搜索树(静态数组建树)
- POJ3630/HDU-1671 Phone List,字典树静态建树!
- Trie树trie(前缀)
- 【Trie】Trie字典树模板 静态指针池、数组写法
- 比赛 注意格式 Calculate S(n)
- win7 下无法修改host文件,最简单的处理方法
- 学生成绩统计
- oracle创建用户,授权的SQL语句
- Input antenna type TPSCR.G5 NONE (TPSCR.G5 NONE) not in ANTEX PCV file; site 2394 (Nam
- trie树(静态建树)
- java基础语句总结
- 万能的google
- Linux下安装和卸载(rpm,tar,dpkg)
- 命令模式--java
- LinuxCast学习笔记20:Basic_command
- 对象作为函数参数
- 介质恢复与实例恢复
- pefile under python 2.4 (centos os ) EnvironmentError: [Errno 22] Invalid argument