Hat’s Words HDU1247

Posted bxd123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hat’s Words HDU1247相关的知识,希望对你有一定的参考价值。

一个很经典的字典树题目 

先建树 再拆单词进行判断是否都在树内

 

因为爆内存错了很久

如果一个四十万的数组  用mamset的话会直接爆几十万的内存  

所以要:用多少 初始化多少才对!( 修改了两条初始化语句 见代码)  不过这题只有一组数据  所以不初始化关系不大

#include<bits/stdc++.h>
using namespace std;

int  trie[400100][26]={0};
int  sum[400100];
char ans[50005][30];//这里数组开小了导致一直wa
int root=0;
int pos=1;
void insert1(char *s)
{
    int root=0;
    for(int i=0;i<strlen(s);i++)
    {   int ch=s[i]-a;
        if( trie[ root ][ch]==0  )
          {

             memset(trie[pos],0,sizeof(trie[pos]));//用多少初始化多少
             trie[root][ch]=pos++;

          }
        root=trie[root][ch];
    }
    sum[root]=1;
}

bool  find1(char *s)
{
    int root=0;
    for(int i=0;i<strlen(s);i++)
    {
        int ch=s[i]-a;
        if( trie[root][ch]==0 )return false;
        root=trie[root][ch];

    }
    return sum[root];

}

int main()
{


   int c=0;
   pos=1;
   memset(sum,0,sizeof(sum));
    memset(trie[0],0,sizeof(trie[0]));//用多少初始化多少
    while(gets(ans[c++]))
    {
     insert1( ans[c-1] );
    }

    for(int i=0;i<=c-1;i++)
    {

        for(int k=1;k<strlen( ans[i] ) ;k++)
        {
            char a[30],b[30];
            strncpy(a,ans[i],k   );a[k]=;
            strncpy(b,ans[i]+k, strlen(ans[i]) );
            b[strlen(ans[i]) -k]=;
            if(find1(b)&&find1(a))
            {
                puts(ans[i]);break;

            }
        }

    }

return 0;
}

 

以上是关于Hat’s Words HDU1247的主要内容,如果未能解决你的问题,请参考以下文章

HDU 1247 Hat’s Words

Hat’s Words HDU1247

HDU - 1247 Hat’s Words 字典树

H - Hat’s Words HDU - 1247

HDU 1247 Hat’s Words(字典树)

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