zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    explain组合索引是否命中
    高并发优化
    docker基础篇一
    Web API 集成Serilog
    复习一下CSS,做笔记记录一下
    Process调用winform程序
    winform自动更新
    格式化xml 给没有节点的内容添加节点
    2.Grpc消息定义
    1.Grpc环境配置
  • 原文地址:https://www.cnblogs.com/bxd123/p/10345688.html
Copyright © 2011-2022 走看看