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;
    }
  • 相关阅读:
    nuxt.js 学习与记录
    图片上传预览 接收
    k8s之deployment
    k8s之service
    k8s的一些命令
    ansible 学习
    k8s之ConfigMap && secret
    k8s 之Job/CronJob
    k8s之PV & PVC
    配置ssh免密登录
  • 原文地址:https://www.cnblogs.com/kafuuchino/p/9612477.html
Copyright © 2011-2022 走看看