我吐血啊。。本来这题字符串处理就挺恶心的,好不容易感觉上已经逻辑对了,结果一直WA。。最后只能跑去查原题的input和output,还好这题是以前的国际竞赛题,可以查找,最后发现是挂在了空行上!!!真是坑死人不偿命啊,诶,说到底还是粗心,那种不断提交一直WA的心情,是广大ACMer心中永远的痛。。
#include<stdio.h>
#include<string.h>
void printBuffer(char *s, int total)
{
if (total == 0)
return;
putchar('1');
int i;
for (i = 0; i < total; i++)
if (s[i] == '1')
printf("11");
else
putchar(s[i]);
putchar('1');
}
void printSame(int count, char c)
{
printf("%d", count);
putchar(c);
}
int main()
{
char s[1024];
while (gets(s) != NULL)
{
if (strlen(s) == 0)
{
putchar('\n');
continue;
}
char buffer[1024];
int i, prev = s[0], index = 0, count = 1;
buffer[index++] = prev;
for (i = 1; s[i] != '\0'; i++)
{
if (s[i] == prev)
{
if (index > 0 && buffer[index - 1] == s[i])
{
printBuffer(buffer, index - 1);
index = 0;
}
count++;
}
else
{
if (count != 1)
{
while (count > 9)
{
printSame(9, prev);
count -= 9;
}
if (count == 1)
buffer[index++] = prev;
else
printSame(count, prev);
}
buffer[index++] = s[i];
count = 1;
}
prev = s[i];
}
if (count != 1)
{
while (count > 9)
{
printSame(9, prev);
count -= 9;
}
if (count == 1)
{
putchar('1');
if (prev == '1')
printf("11");
else
putchar(prev);
putchar('1');
}
else
printSame(count, prev);
}
else
printBuffer(buffer, index);
putchar('\n');
}
return 0;
}