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;
    }
  • 相关阅读:
    Dom对象,控制html元素
    运算符总结
    数组
    变量命名规则
    css实现气泡说明框
    深入理解CSS中的层叠上下文和层叠顺序
    jquery书写
    二级导航
    iis配置
    Android ListView无法触发ItemClick事件
  • 原文地址:https://www.cnblogs.com/AseanA/p/7487034.html
Copyright © 2011-2022 走看看