poj 2001 Shortest Prefixes(字典树)
来源:互联网 发布:淘宝优惠券可以转赠吗 编辑:程序博客网 时间:2024/03/28 23:07
题目链接:poj2001
题目大意:给出一些字符串 ,求最短的区别前缀(即这个前缀是独一无二的且要尽可能小)
思路:只要在字典树上记录所有的节点的记录次数,这个时候只要查到一个次数只有1的时候就可以了。
因为1的是时候说明只有一个单词的前缀经过。
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct node{node *nxt[26];int flag;node()//构造函数{for(int i=0;i<26;i++){nxt[i]=NULL;}flag=0;}};node * root;void init()//初始化根节点{root=new node();}void ins (char *s){int len=strlen(s);node *now=root;//指向根节点for(int i=0;i<len;i++){int to=s[i]-'a';if(now->nxt[to]==NULL)now->nxt[to]=new node();now=now->nxt[to];//now指向新生成的结点now->flag++;}}int fid (char *s){int len=strlen(s);node *now=root;//指向根节点for(int i=0;i<len;i++){int to=s[i]-'a';if(now->nxt[to]==NULL)return -1;now=now->nxt[to];//now指向新生成的结点if(now->flag==1)return i;}return len-1;}char s[1100][25];int main(){init();int cnt=0;while(~scanf("%s",s[cnt])){ins(s[cnt]);cnt++;}for(int i=0;i<cnt;i++){int ans=fid(s[i]);printf("%s ",s[i]);for(int j=0;j<=ans;j++)printf("%c",s[i][j]);printf("\n");}return 0;}
阅读全文
0 0
- POJ 2001:Shortest Prefixes(字典树)
- poj 2001 -- Shortest Prefixes ( 字典树 )
- POJ 2001-Shortest Prefixes(字典树)
- POJ 2001 Shortest Prefixes(字典树)
- POJ 2001 Shortest Prefixes(字典树)
- poj 2001 Shortest Prefixes(字典树)
- POJ - 2001 - Shortest Prefixes (字典树!!)
- POJ 2001 Shortest Prefixes(字典树)
- POJ 2001 Shortest Prefixes(字典树)
- POJ 2001 Shortest Prefixes(字典树)
- POJ 2001 Shortest Prefixes(字典树)
- 【POJ】2001 - Shortest Prefixes(字典树)
- POJ 2001 Shortest Prefixes(字典树)
- poj 2001 Shortest Prefixes(字典树)
- poj 2001Shortest Prefixes(字典树)
- poj 2001 Shortest Prefixes(字典树)
- POJ 2001 Shortest Prefixes ( 字典树 )
- POJ 2001 Shortest Prefixes 字典树Trie
- 游戏-飞机大战 (微信版)
- bootstrap弹出模态框
- 解决导入项目工程“Execution failed for task ':lib:compileReleaseJava'的问题
- 《java基础学习之——重复注解》
- PLSQL注册码,亲测,可用
- poj 2001 Shortest Prefixes(字典树)
- eclipse安装checkstyle 不起作用配置方法
- 为什么说原型制作是产品经理必备的技能之一?
- fragment懒加载
- 1小时写一个分布式系统基础框架
- 实现1+2+3...+n,要求不能使用乘除法、循环、条件判断、选择相关的关键字
- hadoop3种集群方式
- vnc连接远程linux桌面
- 基本数据类型验证