码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 1247 Hat’s Words(字典树)

时间:2016-11-18 06:58:32      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:const   pac   搜索   sizeof   scanf   har   memset   blank   build   

题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1247

题意:给你一系列字符串问你哪些字符串可以由已知的两个字符串组成,输出该字符串。

还是一道字典树,稍微涉及到一些搜索依旧简单。

 

 

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int M = 5e4 + 10;
char s[M][100];
struct TnT {
    TnT *next[27];
    int v;
    TnT():v(0) {
        memset(next , 0 , sizeof(next));
    }
};
void build(TnT *root , char s[]) {
    int len = strlen(s);
    TnT *p = root;
    for(int i = 0 ; i < len ; i++) {
        int id = s[i] - ‘a‘;
        if(p->next[id] == NULL) {
            p->next[id] = new TnT;
        }
        p = p->next[id];
    }
    p->v = 1;
}
int find(TnT *root , char s[] , int st , int flag) {
    int len = strlen(s);
    TnT *p = root;
    int temp = 0;
    for(int i = st ; i < len ; i++) {
        int id = s[i] - ‘a‘;
        if(p->next[id] == NULL) {
            temp = 1;
            break;
        }
        if(p->next[id]->v == 1 && flag == 0 && i != len - 1) {
            int gg = find(root , s , i + 1 , flag + 1);
            if(gg == 1) {
                return 1;
            }
        }
        p = p->next[id];
    }
    if(temp == 1) {
        return 0;
    }
    else {
        if(flag == 1 && p->v == 1) {
            return 1;
        }
        else {
            return 0;
        }
    }
}
void de(TnT *root) {
    if(root == NULL) {
        return ;
    }
    else {
        for(int i = 0 ; i < 26 ; i++) {
            de(root->next[i]);
        }
    }
    delete root;
}
int main()
{
    int count = 0;
    TnT *root = new TnT;
    while(scanf("%s" , s[count]) != EOF) {
        build(root , s[count++]);
    }
    for(int i = 0 ; i < count ; i++) {
        int gg = find(root , s[i] , 0 , 0);
        if(gg) {
            printf("%s\n" , s[i]);
        }
    }
    return 0;
}

hdu 1247 Hat’s Words(字典树)

标签:const   pac   搜索   sizeof   scanf   har   memset   blank   build   

原文地址:http://www.cnblogs.com/TnT2333333/p/6075971.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!