【字典树】HDU 1247 Hat’s Words
2014-08-26 15:56
471 查看
题意:给你一个单词表 输出能由另外两个单词组成的单词
先判断一个单词的前缀是否为单词表中的单词,再判断后缀是否为单词表中的单词;
先判断一个单词的前缀是否为单词表中的单词,再判断后缀是否为单词表中的单词;
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<limits.h> #include<ctype.h> #include<math.h> #include<string> #include<iostream> #include<algorithm> using namespace std; #include<queue> #include<stack> #include<vector> #include<deque> #include<set> #include<map> //N为最大点数 #define M 150 #define IN freopen ("in.txt" , "r" , stdin); #define OUT freopen ("out.txt" , "w" , stdout); //M为最大边数 typedef long long LL; const int MAXN = 2999;//点数的最大值 const int MAXM = 2222;//边数的最大值 const int INF = 0x3f3f3f3f; const int maxnode = 1000000; const int sigma_size =30; struct trie { int ch[maxnode][sigma_size]; int val[maxnode]; int sz; // 结点总数 trie() { sz=1; //初始化 memset(ch[0],0,sizeof(ch[0])); } int idx(char c) { return c-'a'; } //插入字符串s,附加信息为v。注意v必须!=0,因为0表示 本结点不是单词结点 void insert(char *s) { int u=0,n=strlen(s); for(int i=0; i<n; i++) { int c=idx(s[i]); if(!ch[u][c])//结点不存在 { memset(ch[sz],0,sizeof(ch[sz])); val[sz]=0; //附加信息为0 ch[u][c]=sz++;//新建结点 } u=ch[u][c];//往下走 } val[u]++;//字符串的最后一个字符的附加信息为v } int find(char *s) { int u=0,n=strlen(s); for(int i=0; i<n; i++) { int c=idx(s[i]); if(!ch[u][c])//结点不存在 { return 0; } u=ch[u][c];//往下走 } return val[u]; } } tre; int main() { //IN; char s[30010][20]; int i=0; while(scanf("%s",s[i++])!=EOF) { tre.insert(s[i-1]); } for(int j=0; j<i; j++) { int c=tre.idx(s[j][0]); int ac=tre.ch[0][c]; for(int k=0; s[j][k]!='\0'; k++) { if(tre.val[ac])//若前缀是 { if(tre.find(&s[j][k+1]))//判断后缀 { printf("%s\n",s[j]); break; } } c=tre.idx(s[j][k+1]); if(tre.ch[ac][c]==0)//若前缀不在树上则break break; ac=tre.ch[ac][c]; } } return 0; }
相关文章推荐
- HDU 1247 Hat’s Words && Trie(字典树)
- Hat’s Words hdu 1247(字典树 map)
- Hat’s Words HDU - 1247 [字典树]
- hdu 1247 Hat’s Words trie 简单字典树
- HDU 1247 Hat's Words (字典树)
- hdu 1247 字典树 Hat’s Words
- 【字典树】HDU 1247 Hat’s Words
- HDU 1247:Hat’s Words(字典树)
- hdu 1247 Hat’s Words (字典树)
- hdu 1247 Hat’s Words (字典树)
- hdu 1247 Hat’s Words(字典树)
- HDU 1247 Hat’s Words
- hdu 1247 Hat’s Words
- hdu 1247 Hat’s Words
- hdu 1247 Hat’s Words(字典树)
- HDU 1247 Hat’s Words(字典树)
- HDU 1247 Hat’s Words(字典树)
- hdu 1247 Hat’s Words (字典树)
- hdu 1247 Hat’s Words(字典树)
- HDU 1247 Hat’s Words