d574

輸入說明 :

共計10個測資點。

每個測資點只有一組測試資料。 第一行有正整數n(1<=n<=10000000),表示原本咒文的長度(以字元為單位) 第二行則是咒文的內容連續的n個字元。 其中咒文的字元是由小寫字母所組成。

輸出說明 :

如果簡化過的咒文長度小於原咒文,則輸出簡化版本 如果簡化後和原咒文字數相同甚至更多,則輸出原咒文

把出現的的字和連續出現的次數存到一個2維陣列,比較難的是

ex: 125a15b ,你要去算每個字連續出現次數是幾位數+1(每個字元本身)

125a15b長度是7,原本長度是125+15=137所以印出節約的字串

#include<stdio.h>
#include<string.h>
char string[10000005];
int array[2][1000005];
int main()
{
    int l;
    while(scanf("%d",&l)==1)
    {
        scanf("%s",&string);

        int i,j=0;
        int sum=0;

        for(i=0;i<l;i++)
        {
            if(string[i]==string[i+1])
            {
                sum++;
            }
            else
            {
                array[0][j]=string[i];
                array[1][j]=sum+1;
                sum=0;
                j++;
            }
        }

        int count=0;
        int temp;
        for(i=0;i<j;i++)
        {
            temp=array[1][i];
            while(0<temp)
            {
                temp/=10;
                count++;
            }
            count++;
        }

        if(count>=l)
            printf("%s\n",string);


        else 
        {
            for(i=0;i<j;i++)
            {
                printf("%d%c",array[1][i],array[0][i]);
            }
            puts("");
        }
    }
    return 0;
}