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;
}