zoukankan      html  css  js  c++  java
  • POJ 2001 字典树(入门题)

    #include<cstdio>
    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<vector>
    #include<stack>
    #include<cmath>
    #include<queue>
    #include<map>
    using namespace std;
    struct Node
    {
        int c;
        int next[26];
    } node[20005];
    int cnt;
    int newnode()
    {
        ++cnt;
        node[cnt].c=0;
        for(int i=0; i<26; i++)
            node[cnt].next[i]=-1;
        return cnt;
    }
    char s[1006][25];
    int len[1006];
    void insert(int rt,int tt,int now)
    {
        if(now>len[tt])return;
        int p=s[tt][now]-'a';
    
        if(node[rt].next[p]==-1)
        {
            int l=newnode();
            node[rt].next[p]=l;
            node[l].c+=1;
    
            insert(l,tt,now+1);
        }
        else
        {
            int l=node[rt].next[p];
            node[l].c+=1;
    
            insert(l,tt,now+1);
        }
    }
    void print(int rt,int tt,int now)
    {
       if(now>len[tt])return;
       printf("%c",s[tt][now]);
       if(node[rt].c==1)return;
       int p=s[tt][now+1]-'a';
       print(node[rt].next[p],tt,now+1);
    }
    int main()
    {
        int k=0;
        cnt=0;
        node[0].c=0;
        for(int i=0;i<26;i++)
        node[0].next[i]=-1;
        while(~scanf("%s",s[++k]+1))
        {
            len[k]=strlen(s[k]+1);
            insert(0,k,1);
           
        }
        for(int i=1;i<=k;++i)
        {
           printf("%s ",s[i]+1);
           int p=s[i][1]-'a';
           print(node[0].next[p],i,1);
           printf("
    ");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    C#使用System.IO.Path获取文件路径、文件名
    C# 中的await
    深度学习笔记
    单例模式
    hbase的写和读,大合并和小合并
    自定义kafka Sink
    combineByKey
    spark练习题
    sparkonhbase
    HDFS只支持文件append操作, 而依赖HDFS的HBase如何完成增删改查功能
  • 原文地址:https://www.cnblogs.com/shuguangzw/p/4937601.html
Copyright © 2011-2022 走看看