水题不水之字典树(Tire tree)
来源:互联网 发布:snare for windows 编辑:程序博客网 时间:2024/05/29 17:18
今天碰到了一个水题不水。题目链接如下:http://acm.nyist.net/JudgeOnline/problem.php?pid=163
第一感觉就是用字符串存储,然后一个一个地比较,然后,结果你们懂的,显然是TLE(超时),直接给我一个TLE错误,我了个去,然后 没办法才用的字典树。
又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。
提交的最后AC代码如下所示:
#include <iostream>#include <cstdlib>#include <algorithm>#include <cstring>#include <cstdio>using namespace std;struct TireTree{TireTree* child[10];int number;};void DestroyTireTree(TireTree* root){//destroy a tire treeif(!root)//root is nullreturn;for(int i= 0; i< 10; ++i){//destroy childDestroyTireTree(root->child[i]);}delete root;//destroy root}TireTree* CreateNode(int inode){TireTree* node = new TireTree;node->number = inode;memset(node->child, 0, sizeof(TireTree*)*10);//child is nullreturn node;}bool InsertToTireTree(TireTree* root, int iNode, int* bit, int ilen, int iStep){if(root->number){return false;}if(iStep == ilen-1){//the last bitif(root->child[bit[iStep]]){//has a prefixreturn false;}else{root->child[bit[iStep]] = CreateNode(iNode);return true;}}else{if(!root->child[bit[iStep]]){//child is nullroot->child[bit[iStep]] = CreateNode(0);}return InsertToTireTree(root->child[bit[iStep]], iNode, bit, ilen, iStep+1);}}void HandleEachCase();int main(){int iCaseCount;cin>>iCaseCount;while(iCaseCount--){HandleEachCase();}}void HandleEachCase(){int n;int number[100000];scanf("%d", &n);for(int i= 0; i< n; ++i){scanf("%d", number+i);}int bit[10];int ilen;TireTree* root = CreateNode(0);int tmp;bool ok= true;for(int i= 0; i< n; ++i){tmp = number[i];ilen = 0;while(tmp){bit[ilen++]= tmp%10;tmp/= 10;}reverse(bit, bit+ ilen);if(!InsertToTireTree(root, number[i], bit, ilen, 0)){ok = false;break;}}if(ok){cout<<"YES\n"<<endl;}else{cout<<"NO\n";}DestroyTireTree(root);}
- 水题不水之字典树(Tire tree)
- Tire-Tree(前缀树,字典树)
- 字典树(Tire树)
- Tire字典树
- Tire字典树(zz)
- Tire-字典树
- 海量数据处理之Tire树(字典树)
- 海量数据处理之Tire树(字典树)
- 海量数据处理之Tire树(字典树)
- 海量数据处理之Tire树(字典树)
- 海量数据处理之Tire树(字典树)
- 海量数据处理之Tire树(字典树)
- 建树之tire树
- Tire Tree
- tire tree
- hdu 1671 字典树问题 TIRE树
- 字典树(Tire树)模板+例题
- 字典树(Tire树)模板 & 例题
- Java SE 自学笔记8 之 final修饰符
- BI项目中常见问题---模型设计
- 1.窗体与界面设计
- MFC中两种定时器
- VS使用
- 水题不水之字典树(Tire tree)
- ubuntu13.04 有线网卡驱动安装 无法上网 网络配置
- 1.窗体与界面设计
- 如何在杭电第一轮选课中查看跨专业课程时间
- GridControl 校验输入单元格格式
- JAVA和JAVAC 命令行
- 关于camera CTS调试中遇到的问题
- 怎么用u盘安装CentOS 6.4?
- 几个容易混淆的逻辑运算