首页 > 代码库 > HDU 1020:Encoding

HDU 1020:Encoding

Encoding

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 25691    Accepted Submission(s): 11289


Problem Description
Given a string containing only ‘A‘ - ‘Z‘, we could encode it using the following method: 

1. Each sub-string containing k same characters should be encoded to "kX" where "X" is the only character in this sub-string.

2. If the length of the sub-string is 1, ‘1‘ should be ignored.
 

Input
The first line contains an integer N (1 <= N <= 100) which indicates the number of test cases. The next N lines contain N strings. Each string consists of only ‘A‘ - ‘Z‘ and the length is less than 10000.
 

Output
For each test case, output the encoded string in a line.
 

Sample Input
2 ABC ABBCCC
 

Sample Output
ABC A2B3C

简单的水题。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>

using namespace std;

const int M = 10000 + 50;
char str[M];
char a[M];
int b[M];

int main()
{
    int n;
    int t=0;
    int p;
    int i;
    scanf("%d", &n);
    while( n-- )
    {
        t=0;
        p=0;
        memset(str, 0, sizeof(str));
        scanf("%s", str);
        a[t]=str[0];
        for(i=0; i<strlen(str); i++)
        {
            if(str[i]==str[i+1])
                p++;
            else
            {
                b[t]=p;
                t++;
                a[t]=str[i+1];
                p=0;
            }
        }
        for(i=0; i<t; i++)
        {
            if(b[i]>0)
                printf("%d%c", b[i]+1, a[i]);
            else
                printf("%c", a[i]);
        }

        printf("\n");
    }

    return 0;
}