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

Hat’s Words HDU1247

时间:2019-02-01 14:54:13      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:memset   roo   ++   pac   数据   i++   size   c++   经典的   

一个很经典的字典树题目 

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

 

因为爆内存错了很久

如果一个四十万的数组  用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]=\0;
            strncpy(b,ans[i]+k, strlen(ans[i]) );
            b[strlen(ans[i]) -k]=\0;
            if(find1(b)&&find1(a))
            {
                puts(ans[i]);break;

            }
        }

    }

return 0;
}

 

Hat’s Words HDU1247

标签:memset   roo   ++   pac   数据   i++   size   c++   经典的   

原文地址:https://www.cnblogs.com/bxd123/p/10345688.html

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