內容
背景介紹,不是很重要見原題
輸入
幸(サチ/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;
 }
 
 |