zoukankan      html  css  js  c++  java
  • UVA644 Immediate Decodability

    UVA644 Immediate Decodability

    Trie

    Trie模板题

    难度几乎相等的题 P2580 于是他错误的点名开始了

    对于每组数据都清空树太浪费时间,所以我们只要在需要新点时预先把新点原有的数据清空即可。

    剩下除了一些细节要注意,没啥要说的了

    (luogu的标签系统有些迷啊)

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    struct data{
        int nxt[2]; bool end;
        void clear() {nxt[0]=nxt[1]=0; end=0;} //清空原先的数据
    }a[5000001]; //对于每个节点,存储它的下一个字母,以及是否是某个字母的结束符
    char q[2000001];
    int cnt; //节点编号
    bool ok;
    inline void insert(){ 
        int u=0,len=strlen(q); bool ins=0;  //ins:是否插入新节点
        for(int i=0;i<len;++i){
            int p=q[i]-'0';
            if(!a[u].nxt[p]){ //如果之前没有这个节点就插入
                a[++cnt].clear();
                a[u].nxt[p]=cnt; ins=1;
            }
            if(a[u].end) ok=1; //如果某个在它之前插入的单词是它的前缀
            u=a[u].nxt[p]; //跳转到下一个
        }
        if(!ins) ok=1; //如果它是某个在它之前插入的单词的前缀
        a[u].end=1;
    }
    int main(){
        int t=0;
        while(cin>>q){
            if(q[0]=='9') { //一组数据的结束
                printf("Set %d is ",++t);
                if(ok) printf("not ");
                printf("immediately decodable
    ");
                cnt=0; ok=0; a[0].clear(); //注意树根0也要清空
            }else insert();
        }
        return 0;
    }
  • 相关阅读:
    实验一 GIT 代码版本管理
    DS博客作业05--查找
    DS博客作业04--图
    DS博客作业03--树
    DS博客作业02--栈和队列
    DS博客作业01-线性表
    C博客作业05--2019-指针
    C语言博客作业04--数组
    C语言博客作业03--函数
    python exp4 jieba+wordcloud
  • 原文地址:https://www.cnblogs.com/kafuuchino/p/9612477.html
Copyright © 2011-2022 走看看