Test Message

e307: 請讓我留在你的回憶裡

內容

背景介紹,不是很重要見原題


輸入

幸(サチ/Sachi)失去記憶了,頭腦一片空白

請你幫她移除記憶中的空白,找回她的記憶吧

輸入只有一行,含有一個字串 s (|s|<=108)

s 含有所有可印出的字元(包含空白),請你移除其中的空白

移除方式如下:

若連續的空白數為偶數,則全部移除

若為奇數,則移除到只剩下一個空白

  M    y       n  am    e   i        s           S    a    c  h      i    .

輸出

移除空白後剩下的字元

My name is Sachi.


解題思路

簡單的字串處理,重點在 IO 優化。


完整程式碼

AC (0.1s, 2.1MB)
#include <stdio.h>
#define BUFSIZ 1048576
#define BUFMAX 1048000

char output[BUFSIZ];

inline char readChar()
{
static char buffer[BUFSIZ], * now = buffer + BUFSIZ, * end = buffer + BUFSIZ;
if (now == end)
{
if (end < buffer + BUFSIZ)
return 0;
end = (buffer + fread(buffer, 1, BUFSIZ, stdin));
now = buffer;
}
return *now++;
}

int main()
{
register char tmp, * oTop = output, isOdd = 0, *max = output + BUFMAX;
while (tmp = readChar())
{
if (tmp == ' ')
isOdd = ~isOdd;
else
{
if (isOdd)
* oTop++ = ' ', isOdd = 0;
*oTop++ = tmp;
if (oTop > max)
{
*oTop = '\0';
fputs(output, stdout);
oTop = output;
}
}
}
*oTop = '\0';
fputs(output, stdout);
return 0;
}