Ranking (as of 2013-06-29): 35 out of 870
Language: C++
/*
UVa 213 - Message Decoding
To build using Visucal Studio 2010:
cl -EHsc UVa_213_Message_Decoding.cpp
*/
#include <cstdio>
int read_digits(int n)
{
int d = 0, c;
while (n--) {
d <<= 1;
while ((c = getchar()) == '\n')
;
d += c - '0';
}
return d;
}
int main()
{
char chars_map[1 + 3 + 7 + 15 + 31 + 63 + 127];
const int chars_map_indices[] = {-1, 0, 1, 4, 11, 26, 57, 120};
// chars_map_indices[i] is the index to chars_map[] for the key length of i
const int terminaters[] = {0, 1, 3, 7, 15, 31, 63, 127};
// terminaters[i] is the terminater for the key length of i
while (true) {
int c = getchar();
if (c == EOF)
break;
else if (c == '\n')
continue;
// read a header
char* p = chars_map;
do
*p++ = static_cast<char>(c);
while ((c = getchar()) != '\n');
int length;
while (length = read_digits(3)) {
char* q = &chars_map[chars_map_indices[length]];
int i, t = terminaters[length];
while ((i = read_digits(length)) != t)
putchar(*(q + i));
}
putchar('\n');
}
return 0;
}
No comments:
Post a Comment