UVA 644 Immediate Decodability (字符处理)

An encoding of a set of symbols is said to be immediately decodable if no code for one symbol is the prefix of a code for another symbol. We will assume for this problem that all codes are in binary, that
no two codes within a set of codes are the same, that each code has at least one bit and no more than ten bits, and that each set has at least two codes and no more than eight.

Examples: Assume an alphabet that has symbols {A, B, C, D}

The following code is immediately decodable:

A:01 B:10 C:0010 D:0000

but this one is not:

A:01 B:10 C:010 D:0000 (Note that A is a prefix of C)

Input

Write a program that accepts as input a series of groups of records from a data file. Each record in a group contains a collection of zeroes and ones representing a binary code for a different symbol. Each group
is followed by a single separator record containing a single 9; the separator records are not part of the group. Each group is independent of other groups; the codes in one group are not related to codes in any other group (that is, each group is to be processed
independently).

Output

For each group, your program should determine whether the codes in that group are immediately decodable, and should print a single output line giving the group number and stating whether the group is, or is not,
immediately decodable.

The Sample Input describes the examples above.

Sample Input

01
10
0010
0000
9
01
10
010
0000
9

Sample Output

Set 1 is immediately decodable
Set 2 is not immediately decodable

一个串不能是还有一个串的前缀。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
typedef long long LL;
using namespace std;
#define REPF( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define REP( i , n ) for ( int i = 0 ; i < n ; ++ i )
#define CLEAR( a , x ) memset ( a , x , sizeof a )
//map<string,int>q;
char str[1100][10],s[10];
int main()
{
    int cas=1;
     std::ios::sync_with_stdio(false);
     while(cin>>str[0])
     {
         int l=1;
         char *p;
         while(cin>>str[l]&&str[l++][0]!='9');
         int flag=1;
         REP(i,l-1)
         {
             REP(j,l-1)
             {
                 if(i==j)  continue;
                 p=strstr(str[i],str[j]);
                 if((p-str[i])==0)
                 {
                     flag=0;
                     break;
                 }
             }
         }
         if(flag)  printf("Set %d is immediately decodable\n",cas++);
         else     printf("Set %d is not immediately decodable\n",cas++);
     }
     return 0;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-11-03 21:01:03

UVA 644 Immediate Decodability (字符处理)的相关文章

UVa 644 - Immediate Decodability

题目:给你一些01串,判断是不是某些串是其它串的前缀. 分析:字符串,字典树. 首先,将字符串按长度排序,这样前缀一定在前面: 然后,再插入字典树的过程中,判断是否覆盖即可. 说明:注意数组的大小. #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> using namespace std; char words[1004][104]; /* Trie def

UVA 409 Excuses, Excuses! (字符处理)

Judge Ito is having a problem with people subpoenaed for jury duty giving rather lame excuses in order to avoid serving. In order to reduce the amount of time required listening to goofy excuses, Judge Ito has asked that you write a program that will

UVA 10340- All in All(字符串匹配)

Problem E All in All Input: standard input Output: standard output Time Limit: 2 seconds Memory Limit: 32 MB You have devised a new encryption technique which encodes a message by inserting between its characters randomly generated strings in a cleve

UVA题目分类

题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics 10300 - Ecological Premium 458 - The Decoder 494 - Kindergarten Counting Game 414 - Machined Surfaces 490 - Rotating Sentences 445 - Marvelous Mazes

寒假练习 02

今天刷了小白书的字符串专题,各种WA以及PE.UVaOJ中有时候会把PE判成WA,这样会导致很难查错. UVa 401 这道题目有个坑,只有表格中列出的才是镜像字母,没有列出了的表示没有镜像字母,在这上WA了一次. #include <iostream> #include <string> using namespace std; const char pAlphabet[] = { 'A', '*', '*', '*', '3', '*', '*', 'H', 'I', 'L',

uva:10340 - All in All(字符串匹配)

题目:10340 - All in All 题目大意:给出字符串s和t,问s是否是t的子串.s若去掉某些字符能和t一样,那么t是s的子串. 解题思路:匹配字符.t的每个字符和s中的字符匹配.注意这里的字符数组大小要开大点. 代码: #include <stdio.h> #include <string.h> const int N = 1000005; char s[N], t[N]; bool match () { int i = 0; int lens = strlen(s);

UVA 10815 Andy&#39;s First Dictionary(字符处理)

Andy, 8, has a dream - he wants to produce his very own dictionary. This is not an easy task for him, as the number of words that he knows is, well, not quite enough. Instead of thinking up all the words himself, he has a briliant idea. From his book

UVA 11019 字符矩阵哈希

思路:以前没做过字符矩阵的哈希,所以这题是看别人博客写的. #pragma comment(linker, "/STACK:1024000000,1024000000") #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<map> #include<queue> #include<set>

UVA 11019(Matrix Matcher-vector从迭代器中取值,AC自动机匹配字符矩阵)

Problem H Matrix Matcher Input: Standard Input Output: Standard Output Given an N * M matrix, your task is to find the number of occurences of an X * Y pattern. Input The first line contains a single integer t(t ≤ 15), the number of test cases. For e