zoukankan      html  css  js  c++  java
  • 算法复习——trie树(poj2001)

    题目:

    题目描述

    给出 n 个单词(1<=n<=1000),求出每个单词的非公共前缀,如果没有,则输出自己。

    输入格式

    输入 N 个单词,每行一个,每个单词都是由 1~20 个小写字母构成。

    输出格式

    输出 N 行,每行由一个空格的两部分,第一部分是输入的单词,第二部分是该单词在所有单词中的非公共前缀,如果没有,则输出自己。

    样例数据 1

    输入  [复制]

     
    carbohydrate 
    cart 
    carburetor 
    caramel 
    caribou 
    carbonic 
    cartilage 
    carbon 
    carriage 
    carton 
    car 
    carbonate

    输出

    carbohydrate carboh 
    cart cart 
    carburetor carbu 
    caramel cara 
    caribou cari 
    carbonic carboni 
    cartilage carti 
    carbon carbon 
    carriage carr 
    carton carto 
    car car 
    carbonate carbona

    题解:

    trie树模板题

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cmath>
    #include<ctime>
    #include<cctype>
    #include<cstring>
    #include<string>
    #include<algorithm>
    using namespace std;
    const int N=40005;
    struct node
    {
      int son[30],cnt;
    }trie[N];
    char s[1005][25];
    int n,len,tot=0;
    inline void build(char t[])
    {
      int temp=0;
      for(int i=1;i<=len;i++)
      {
        if(!trie[temp].son[t[i]-'a'])
          trie[temp].son[t[i]-'a']=++tot;
        temp=trie[temp].son[t[i]-'a'];
        trie[temp].cnt++;
      }
    }
    inline void find(char t[])
    {
      int temp=0;
      for(int i=1;i<=len;i++)
      {
        cout<<t[i];
        if(trie[trie[temp].son[t[i]-'a']].cnt==1)  return;  
        temp=trie[temp].son[t[i]-'a'];
      }
    }
    int main()
    {
      //freopen("a.in","r",stdin);
      while(scanf("%s",s[++n]+1)!=EOF)
      {
        len=strlen(s[n]+1);
        build(s[n]);
      }
      for(int i=1;i<=n;i++)
      {
        printf("%s ",s[i]+1);len=strlen(s[i]+1);
        find(s[i]);
        cout<<endl;
      }
      return 0;
    }
  • 相关阅读:
    【转】Android Hook框架Xposed详解
    【转】不需要 Root,也能用上强大的 Xposed 框架:VirtualXposed
    【转】手把手教你读取Android版微信和手Q的聊天记录(仅作技术研究学习)
    【转】关于音频焦点的理解
    test
    Linux只下载不安装软件包
    Linux用户创建/磁盘挂载相关命令
    telnet的安装配置及xinetd的讨论
    vsftp安装配置教程
    wordpress安装教程
  • 原文地址:https://www.cnblogs.com/AseanA/p/7487034.html
Copyright © 2011-2022 走看看