hdu 1247 (字典树)
来源:互联网 发布:linux挂载u盘ntfs 编辑:程序博客网 时间:2024/06/05 19:53
点击打开链接
分析:
对每一个字符串进行分解,看它分解的两部分能否在字典树中find,用hash标记。。。
WA了好几遍。。。
下面是大神的ice_Crazy的代码。。
#include"stdio.h"#include"stdlib.h"#include"string.h"struct dictree{ struct dictree *child[26]; int flag;};struct dictree *root;char str[50011][50];void insert(char *source){ int i,j; int len; struct dictree *current,*newnode; len=strlen(source); current=root; for(i=0;i<len;i++) { if(current->child[source[i]-'a']!=0) current=current->child[source[i]-'a']; else { newnode=(struct dictree *)malloc(sizeof(struct dictree)); for(j=0;j<26;j++) newnode->child[j]=0; newnode->flag=0; current->child[source[i]-'a']=newnode; current=newnode; } } current->flag=1;}int find(char *source){ int i; int len; struct dictree *current; len=strlen(source); current=root; for(i=0;i<len;i++) { if(current->child[source[i]-'a']!=0) current=current->child[source[i]-'a']; else return 0; } return current->flag;}int main(){ char t1[50],t2[50]; int t; int k; int i,l,j,j2; int len; int hash[50011]; root=(struct dictree *)malloc(sizeof(struct dictree)); for(j=0;j<26;j++) root->child[j]=0; root->flag=0; k=0; while(scanf("%s",str[k])!=-1) { insert(str[k]); k++; } for(i=0;i<k;i++) { len=strlen(str[i]); hash[i]=0; if(len==1) continue; t=len-1; for(l=1;l<=t;l++) { for(j=0;j<l;j++) t1[j]=str[i][j]; t1[j]=0; for(j2=0;j<len;j++,j2++)t2[j2]=str[i][j]; t2[j2]=0; if(find(t1)&&find(t2)) {hash[i]=1;break;} } } for(i=0;i<k;i++) if(hash[i]) printf("%s\n",str[i]); return 0;}
我的代码:(还没A呢)
#include"stdio.h"#include"string.h"#include"stdlib.h"struct tree{struct tree *child[26];int num;};struct tree *root;void insert(char *p){int i,j;int len;struct tree *cur,*nee;cur=root;len=strlen(p);for(i=0;i<len;i++){if(cur->child[p[i]-'a']!=0){cur=cur->child[p[i]-'a'];//cur->num++;}else{nee=(struct tree*)malloc(sizeof(struct tree));for(j=0;j<26;j++)nee->child[j]=0;nee->num=0;cur->child[p[i]-'a']=nee;cur=nee;}}cur->num=1;}int find(char *p){int i;int len;struct tree *cur;cur=root;len=strlen(p);for(i=0;i<len;i++){if(cur->child[p[i]-'a']!=0)cur=cur->child[p[i]-'a'];else return 0;}return cur->num;}int hash[50011];char str[50011][51];int main(){int i,j,l,k;int t1,t2,len;char s1[55],s2[55];root=(struct tree*)malloc(sizeof(struct tree));root->num=0;for(i=0;i<26;i++)root->child[i]=0;k=0;while(gets(str[k]))insert(str[k++]);for(i=0;i<k;i++){hash[i]=0;len=strlen(str[i]);if(len==1)continue;for(j=1;j<len;j++){t1=t2=0;for(l=0;l<j;l++)s1[t1++]=str[i][l];s1[t1]=0;for(;l<len;l++)s2[t2++]=str[i][l];s2[t2]=0;if(find(s1)&&find(s2)){hash[i]=1;break;}}}for(i=0;i<k;i++){if(hash[i])printf("%s\n",str[i]);}return 0;}
- hdu 1247 (字典树)
- hdu 1247 字典树
- hdu 1247 字典树
- hdu 1247(字典树)
- hdu 1247 字典树
- HDU 1247 字典树
- hdu 1247 字典树
- hdu 1247~~字典树
- hdu 1247 字典树
- HDU 1247 字典树
- hdu 1247 字典树
- HDU 1075 1247(字典树)
- 字典树 之 hdu 1247
- hdu 1247 字典树模版
- hdu Repository(字典树)
- hdu 1251 (字典树)
- hdu 1075 (字典树)
- hdu 1075(字典树)
- 图结构的应用:教学计划编制问题
- MFC文本编程——孙鑫第五课
- js实现求地球表面两点距离
- 现在,我们该怎么创业
- runat=server时返回脚本时的书写格式
- hdu 1247 (字典树)
- CString 类相应函数
- 植物大战僵尸中文版修改器源码
- 黑马程序员——C#复习之图片查看器
- Programmer & Love
- Winsock重叠模型
- Smith Numbers
- NSIS脚本编译后乱码
- oracle用户管理