uva_644_Immediate Decodability

来源:互联网 发布:网络信息安全三级等保 编辑:程序博客网 时间:2024/05/18 20:08
这里运用了树的数据结构先对串按照长度排序,然后遍历树,到达尾部的时候标记,当一个串行走在树的过程中,如果这个点已经标记了,那么说明这串的前缀是另一个串。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define MAXN    3000#define MAXCHAR 100int  hash[MAXN];char tmp[MAXCHAR];string str[MAXCHAR/10+10];int cmp(const string &a, const string &b){        return a.length() < b.length();}int valid(const int &cnt){        int pos;        for(int i = 0; i < cnt; i ++) { pos = 1;                for(int j = 0; j < str[i].length(); j ++) {                        pos = (pos<<1)+str[i][j]-'0';                        if( hash[pos] ) {                                return 0;                        }                }                hash[pos] = 1;        }        return 1;}int main(int argc, char const *argv[]){#ifndef ONLINE_JUDGE        freopen("test.in", "r", stdin);#endif        int cas(1), cnt(0);        memset(hash, 0, sizeof(hash));        while( ~scanf("%s", tmp) ) {                if( !strcmp(tmp, "9") ) {                        sort(str, str+cnt, cmp);                        if( valid(cnt) ) {                                printf("Set %d is immediately decodable\n", cas ++);                        }                        else {                                printf("Set %d is not immediately decodable\n", cas ++);                        }                        cnt = 0; memset(hash, 0, sizeof(hash));                }                else {                        str[cnt].clear(); str[cnt ++] += tmp;                }        }        return 0;}

原创粉丝点击