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]=‘