标签: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; }
标签:memset roo ++ pac 数据 i++ size c++ 经典的
原文地址:https://www.cnblogs.com/bxd123/p/10345688.html