zoukankan      html  css  js  c++  java
  • 293. [NOI2000] 单词查找树——COGS

    293. [NOI2000] 单词查找树

    ★★   输入文件:trie.in   输出文件:trie.out   简单对比
    时间限制:1 s   内存限制:128 MB

    在进行文法分析的时候,通常需要检测一个单词是否在我们的单词列表里。为了提高查找和定位的速度,通常都要画出与单词列表所对应的单词查找树,其特点如下:

    • 根节点不包含字母,除根节点外每一个节点都仅包含一个大写英文字母;
    • 从根节点到某一节点,路径上经过的字母依次连起来所构成的字母序列,称为该节点对应的单词。单词列表中的每个词,都是该单词查找树某个节点所对应的单词;
    • 在满足上述条件下,该单词查找树的节点数最少。

    单词列表对应的单词查找树

    A
    AN
    ASP
    AS
    ASC
    ASCII
    BAS
    BASIC 

    对一个确定的单词列表,请统计对应的单词查找树的节点数(包括根节点)

    [输入文件]

    该文件为一个单词列表,每一行仅包含一个单词和一个换行/回车符。每个单词仅由大写的英文字符组成,长度不超过63个字符。文件总长度不超过32K,至少有一行数据。

    [输出文件]

    该文件中仅包含一个整数和一个换行/回车符。该整数为单词列表对应的单词查找树的节点数。

    [输入输出文件样例]

    Input

    A
    AN
    ASP
    AS
    ASC
    ASCII
    BAS
    BASIC
    

    Output

    13

    Trie树插入模板


    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #define N 101010
    
    using namespace std;
    
    void in(int &x){
        register char c=getchar();x=0;int f=1;
        while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}
        while(isdigit(c)){x=x*10+c-'0';c=getchar();}
        x*=f;
    }
    
    char s[N]; 
    int trie[N][26],tot;
    
    void insert(){
        int l=strlen(s);
        int root=0;
        for(int i=0;i<l;i++){
            int id=s[i]-'A';
            if(!trie[root][id]) trie[root][id]=++tot;
            root=trie[root][id];
        }
    }
    
    int main()
    {
        freopen("trie.in","r",stdin);freopen("trie.out","w",stdout);
        while(scanf("%s",s)==1){
            insert();
        }printf("%d
    ",tot+1);
        return 0;
    }

      



  • 相关阅读:
    MySQL锁总结
    DDL和DML
    字节、字、位、比特之间的关系
    Mysql数据库、表设计规范指南
    Mysql性能优化关键配置指南
    3.python正则匹配不到内容时消耗大量内存
    1. postman使用
    2. python提示:TypeError: unhashable type: 'list'
    14. selenium的Page Object模型
    12.unittest的学习
  • 原文地址:https://www.cnblogs.com/song-/p/9308482.html
Copyright © 2011-2022 走看看