UVA644 Immediate Decodability

Posted kafuuchino

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
}

 

以上是关于UVA644 Immediate Decodability的主要内容,如果未能解决你的问题,请参考以下文章

「UVA644」 Immediate Decodability(Trie

Immediate Decodability[UVA644](Trie树入门)

Publication的 immediate_sync 属性

vue.js监听属性watch(handler方法immediate属性deep属性)

initially immediate 与 initially deferred

vue watch中deep和immediate的用法