Problem D
Decoding
Input: Standard Input
Decoding
Input: Standard Input
Output: Standard
Output
Encoding is the process of
transforming information from one format into another. There exist several
different types of encoding scheme. In this problem we will talk about a very simple
encoding technique; Run-Length Encoding.
Run-length encoding is a very
simple and easy form of data compression in which consecutive occurrences of
the same characters are replaced by a single character followed by its
frequency. As an example, the string ‘AABBBBDAA’
would be encoded to ‘A2B4D1A2’,
quotes for clarity.
In this problem, we are
interested in decoding strings that were encoded using the above procedure.
Input
The first line of input is an
integer T(T<50) that indicates the number of test
cases. Each case is a line consisting of an encoded string. The string will
contain only digits [0-9] and letters [A-Z]. Every inputted string will be
valid. That is, every letter will be followed by 1 or more digits.
Output
For each case, output the case
number followed by the decoded string. Adhere to the sample for exact format.
You may assume the decoded string
won’t have a length greater than 200 and it will only consist of upper case
alphabets.
Sample Input Output for Sample Input
3
A2B4D1A2
A12
A1B1C1D1
|
Case 1: AABBBBDAA
Case 2: AAAAAAAAAAAA
Case 3: ABCD
|
Problemsetter: Sohel Hafiz
Special
Thanks to: Mohammad Mahmudur Rahman
Solution:
#include <stdio.h>
#include <ctype.h>
#define MAX 201
int main(){
static int T, t, i, j, k, K, f;
static char c,d, S[MAX], R[MAX];
/*freopen("in11541.txt", "r", stdin);*/
scanf("%d\n", &T);
for(t = 1; t <= T; t++){
scanf("%s", S);
for(i = 0, f = k = K = 0; (c = S[i]) != '\0'; i++){
if(isalpha(c)){
if(f == 2){
for(j = 0; j < k; j++)
R[K++] = d;
k = 0;
}
f = 1;
d = c;
}else{
k = k*10+(c-'0');
f = 2;
}
}
if(k)
for(j = 0; j < k; j++)
R[K++] = d;
R[K] = '\0';
printf("Case %d: %s\n", t, R);
}
return 0;
}
#include <ctype.h>
#define MAX 201
int main(){
static int T, t, i, j, k, K, f;
static char c,d, S[MAX], R[MAX];
/*freopen("in11541.txt", "r", stdin);*/
scanf("%d\n", &T);
for(t = 1; t <= T; t++){
scanf("%s", S);
for(i = 0, f = k = K = 0; (c = S[i]) != '\0'; i++){
if(isalpha(c)){
if(f == 2){
for(j = 0; j < k; j++)
R[K++] = d;
k = 0;
}
f = 1;
d = c;
}else{
k = k*10+(c-'0');
f = 2;
}
}
if(k)
for(j = 0; j < k; j++)
R[K++] = d;
R[K] = '\0';
printf("Case %d: %s\n", t, R);
}
return 0;
}
No comments:
Post a Comment