HDU1247——Hat’s Word

来源:互联网 发布:原生ajax请求json数据 编辑:程序博客网 时间:2024/06/07 14:45

简单的模板套用。先把所有的字都加入到字典树里,然后一个个字分成两部分去搜,看是否符合条件。

#include <stdio.h>#include <ctype.h>#include <string.h>#include <stdlib.h>#include <limits.h>#include <math.h>#include <algorithm>using namespace std;const int MAX=26;typedef struct TrieNode{    int flag;      struct TrieNode *next[MAX]; } TrieNode;TrieNode Memory[1000000]; int allocp = 0;char s[50005][100];TrieNode * createTrieNode(){    TrieNode * tmp = &Memory[allocp++];    tmp->flag = 1;    for (int i = 0; i < MAX; i++)        tmp->next[i] = NULL;    return tmp;}void insertTrie(TrieNode *  pRoot, char * str){    TrieNode * tmp = pRoot;    int i = 0, k;       while (str[i])    {        k = str[i] - 'a';         if (tmp->next[k])        {                    }        else        {            tmp->next[k] = createTrieNode();        }        tmp = tmp->next[k];        i++;     }tmp->flag=0;}int searchTrie(TrieNode * root, char * str){    if (root == NULL)        return 0;    TrieNode * tmp = root;    int i = 0, k;    while (str[i])    {        k = str[i] - 'a';        if (tmp->next[k])        {if(str[i+1]=='\0'&&tmp->next[k]->flag==0)return 1;            tmp = tmp->next[k];        }        else            return 0;        i++;    }    return 0; }int main(void){      TrieNode *Root = createTrieNode();    int i=0;while(scanf("%s",s[i])!=EOF){//printf("%s\n",s[i]);insertTrie(Root,s[i]);i++;}int j;int k;int length;char t1[100],t2[100];for(j=0;j<i;j++){length=strlen(s[j]);for(k=1;k<length;k++){strcpy(t1,s[j]);t1[k]='\0';strcpy(t2,s[j]+k);//printf("%s %s\n",t1,t2);if(searchTrie(Root,t1)&&searchTrie(Root,t2)){printf("%s\n",s[j]);break;}}}    return 0;}


0 0