HDU 1247 Hat’s Words(字典树)

原创 2013年12月03日 19:08:51

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

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
char str1[16],str2[16],map[50005][16];
using namespace std;
struct node
{
    bool flag;
    node *next[26];
    node()
    {
        flag=false;
        for(int i=0;i<26;i++) next[i]=NULL;
    }
}*root;
void insert(char *s)
{
    node *p;
    p=root;
    int i,len;
    len=strlen(s);
    if(len==0)  return;
    for(i=0;i<len;i++)
    {
        if(p->next[s[i]-'a']!=NULL)
           p=p->next[s[i]-'a'];
        else
        {
            p->next[s[i]-'a']=new node();
            p=p->next[s[i]-'a'];
        }
    }
    p->flag=true;
}
bool search(char *s)
{
    node *p;
    p=root;
    int i,len=strlen(s);
    if(len==0)  return false;
    for(i=0;i<len;i++)
    {
        if(p->next[s[i]-'a']!=NULL)
           p=p->next[s[i]-'a'];
        else return false;
    }
    return p->flag;
}
int main()
{
   root=new node();
   int ni,nj,i,j,k,len;
   for(i=-1;scanf("%s",map[++i])!=EOF;insert(map[i]));
   for(j=0;j<=i;j++)//将单词分成两部分,放到树状数组里去找
   {
       len=strlen(map[j]);
       for(k=1;k<len;k++)
       {
           for(ni=0;ni<k;ni++)   str1[ni]=map[j][ni];
           for(nj=k;nj<len;nj++) str2[nj-k]=map[j][nj];
           str1[ni]=str2[nj-k]='\0';
           if(search(str1)&&search(str2))
           {
               printf("%s\n",map[j]);
               break;
           }
       }
   }
   return 0;
}


相关文章推荐

hdu1247 Hat’s Words ---- 字典树

原题链接: http://acm.hdu.edu.cn/showproblem.php?pid=1247 一:原题内容 Problem Description A hat’s...
  • LaoJiu_
  • LaoJiu_
  • 2016年06月05日 16:27
  • 419

【字典树】hdu 1247 Hat’s Words

http://acm.hdu.edu.cn/showproblem.php?pid=1247 第二道字典树。 先建树,然后对每个词进行查询,若串存在前缀和后缀都属于整棵字典树,则满足题意 /* ...

hdu 1247 Hat’s Words 字典树,还是比较有意思的题目

Problem Description A hat’s word is a word in the dictionary that is the concatenation of exactly tw...

hdu 1247 Hat’s Words(字典树)

Hat’s Words Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To...

HDU-1247-Hat’s Words(字典树)

Hat’s WordsTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota...

hdu 1247 Hat’s Words 字典树(静态版)

HDU1247 ------明天开始作线段树和树状数组啦,字典树先告一段落            《Hat’s Words》就是纯粹的字典树模板啊。。插入完了查找。。只是查找的时候要把每个...

[字典树] HDU 1247 - Hat’s Words

这个题一开始我想的是最暴力的方法,先把所有单词建成字典树。。 然后n^2复杂...

hdu 1247 Hat’s Words 字典树

典型的字典树: //思路:单词是小写的 //1)把所有的单词添加到字典树中 //2)然后针对每一个单词,把这个单词分成2个部分,分别在字典树中查询,如果同时存在则输出该单词,否则继续分成2个部分 #i...

HDU 1247 Hat’s Words(字典树)

思路: 改造字典树模板,Search在访问节点时如果发现单词结尾对剩下部分进行查询,若剩下部分正好对应另一个单词就输出。 TIP: 题目说要按字典序输出,但是貌似是不用的... #includ...

hdu1247 Hat’s Words(字典树)

题目链接:hdu1247 /* 大意: 如果两个单词组成的单词存在,则输出组合后的单词 思路:字典树 在查找时,将一个单词分成两部分,看这两部分是否存在 */ #include ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU 1247 Hat’s Words(字典树)
举报原因:
原因补充:

(最多只允许输入30个字)