p1364

将它作为我的树的练习题来做的,根本没有想其他的什么方法。

先去看书上的模板,竟然用到了指针啊?干脆的什么都看不懂。于是就苦苦回忆寒假学的东西,经历了无数苦难波折后写下了一个非常非常对的代码(在自己的电脑上运行答案都对):

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;
}
View Code

但是,这份代码交到oj上是全错的,因为最后一步:ans不需要+1,我也不知道为什么。

还有一件事,end在哪个哪个版本中是关键字,要少用,忘了学长说了啥了,总之就orz

原文地址:https://www.cnblogs.com/qywyt/p/9063250.html