将它作为我的树的练习题来做的,根本没有想其他的什么方法。
先去看书上的模板,竟然用到了指针啊?干脆的什么都看不懂。于是就苦苦回忆寒假学的东西,经历了无数苦难波折后写下了一个非常非常对的代码(在自己的电脑上运行答案都对):
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
int end=27; int i,f,ans=0,boyt,now; string s; struct lianbiao { char n; int boy[27]; }trie[60000]; int main() { //freopen("123.in","r",stdin); while(cin>>s) { now=int(s[0]-64); trie[now].n=s[0]; for(f=1;f<s.size();f++) { boyt=int(s[f])-64; if(trie[trie[now].boy[boyt]].n==s[f])//已经有了 { now=trie[now].boy[boyt]; } else { trie[end].n=s[f]; trie[now].boy[boyt]=end; now=end; end++; } } } for(i=1;i<=60000;i++) if(trie[i].n!=0) ans++; cout<<ans+1; return 0; }
但是,这份代码交到oj上是全错的,因为最后一步:ans不需要+1,我也不知道为什么。
还有一件事,end在哪个哪个版本中是关键字,要少用,忘了学长说了啥了,总之就orz