HDU 1671 Phone List (字典树入门基础题)
来源:互联网 发布:实名认证数据库设计 编辑:程序博客网 时间:2024/06/05 18:41
题目链接:HDU 1671 Phone List
题意:判断所给的字符串中是否存在一个字符串是其他任意字符串的前缀。
刚学字典树。
注意初始化,
AC代码:
#include<stdio.h>#include<string.h>#define Word_Len 100002#define Sigma_size 30struct Trie{ int ch[Word_Len][Sigma_size]; //Word_Len是字典树的节点数 若都是小写字母Sigma_size=26int Have_word[Word_Len]; //这个节点下有几个单词int value[Word_Len]; // 这个节点附带的信息,初始化为0表示这个节点不存在单词,所以节点带的信息必须!=0int sz; //当前节点数void init() //初始化字典树{sz=1;memset(ch[sz],0,sizeof ch[sz]);memset(Have_word,0,sizeof Have_word);memset(value,0,sizeof value);}int idx(char c) //字符串编号{return c-'0';}void build(char s[]){int i;int u=0;int len=strlen(s);for(i=0;i<len;i++){int c=idx(s[i]);if(!ch[u][c]) //节点不存在就新建后附加{memset(ch[sz],0,sizeof ch[sz]);value[sz]=0;ch[u][c]=sz++;}u=ch[u][c]; //u等于下前一个字母的节点value[u]=c;Have_word[u]++; //现在的u就是这个单词的最后一个位置}}int find_word(char s[]){int i;int u=0;int len=strlen(s);for(i=0;i<len;i++){int c=idx(s[i]);if(!ch[u][c]) //节点不存在return 0;u=ch[u][c];}return Have_word[u];}};Trie ac;char num[50010][20];int main(){int t;int i,n;while(scanf("%d",&t)!=EOF){while(t--){ac.init();scanf("%d",&n);for(i=0;i<n;i++){scanf("%s",num[i]);ac.build(num[i]);}for(i=0;i<n;i++){int ans=ac.find_word(num[i]);//printf("(%d)\n",ans);if(ans>1)break;}if(i<n)printf("NO\n");elseprintf("YES\n");for(i=0;i<n;i++)memset(ac.ch[i],0,sizeof ac.ch[i]);//初始化,刚开始没考虑到}}return 0;}/*10211111221111112*/
反思:程序的初始化很关键,没做好初始化,跑多个案例,答案天差地别。学习一些算法刚开始可以采用黑箱方法,前提是原理要明白。
0 0
- HDU 1671 Phone List (字典树入门基础题)
- HDU 1671 Phone List 字典树基础
- HDU-1671 Phone List (字典树 入门题)
- HDU 1671Phone List (字典树入门)
- hdu 1671 Phone List(字典树)
- HDU-#1671 Phone List(字典树)
- hdu 1671 phone list(字典树)
- HDU 1671 Phone List(字典树)
- HDU 1671 Phone List(字典树)
- HDU 1671 Phone List(字典树)
- HDU 1671 Phone List(字典树)
- HDU 1671 Phone List (字典树)
- HDU 1671 Phone List(字典树)
- hdu 1671 Phone List(字典树)
- HDU 1671 Phone List (字典树)
- HDU 1671 Phone List(字典树)
- hdu 1671 Phone List(字典树)
- HDU 1671 Phone List(字典树)
- 关闭Eclipse的breadcrumb工具条
- 常用敏捷开发方法
- jquery.uploadify.3.2.1 试用在IE9,IE10中 上传文件的按钮会无法点击
- Win8.1+VS2013+OpenCV2.4.9+Kinect for Windows SDK v1.8开发环境配置
- <s:form action="login"...与<s:form action = "login.action".的区别
- HDU 1671 Phone List (字典树入门基础题)
- openGL ES view 截屏保存成UIImage
- jni编译方法
- LogQuery
- UVA10970 Big Chocolate
- 详解Android中AsyncTask的使用
- android layout_gravity 与gravity 区别
- 在rhel5.5下安装oracle 10g
- mysql TIMESTAMP