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;}