Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 8644 | Accepted: 4103 |
Description
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
Output
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
Source
#include <stdio.h>
char tree[10000];
int cases;
void next()
{
printf("Set %d is not immediately decodable\n", ++cases);
while (getchar() != '9')
;
getchar();
memset(tree, -1, sizeof(tree));
}
int main()
{
int i = 2;
char c;
memset(tree, -1, sizeof(tree));
while ((c = getchar()) != EOF) {
if (c == '\n') {
if (tree[i] == '0' || tree[i+1] == '1') {
next();
}
tree[i] = tree[i+1] = '2';
i = 2;
}
else if (c == '9') {
getchar();
printf("Set %d is immediately decodable\n", ++cases);
memset(tree, -1, sizeof(tree));
i = 2;
}
else {
if (c == '0') {
if (tree[i] == '2') {
next();
i = 2;
}
else {
tree[i] = c;
i *= 2;
}
}
else if (c == '1') {
if (tree[++i] == '2') {
next();
i = 2;
}
else {
tree[i] = c;
i *= 2;
}
}
}
}
}