題目來源:judgegirl from ntu prof. pangfeng Liu
Task Description
寫一個程式模擬書架。假設你有 255 本書和一個可容納 8 本書的書架。255 本書每本有一個由 1 到255 的號碼,且一開始書都在書櫃裡。8 本書的書架在桌上,且一開始是空的。當我們想看一本書的時候,我們會先在書架上找,如果找到,我們就取出來看,看完就塞回書架的最右邊。如果書架上找不到,我們就從書櫃裡找出來看,看完後一樣塞回書架的最右邊。但此時書架上可能已經有 8 本書了,此時我們就將書架中最左邊的書放回書櫃,將書架上的書向左挪,空出最右邊放我們剛看完的書。請模擬一段時間之後書架的情形。
由於一本書的號碼最大到 255,我們可以用 8 個位元來表示。同時一個 long long int 有8個位元組,剛好可以用來模擬 8 本書的書架。
Input
輸入為一介於 1 到 255 的整數序列,代表我們看書的順序。程式必須處理所有的輸入直到 EOF。
Output
輸出為 8 個整數,代表左到右最後書架中的書的編號,如果書架該位置沒有書則輸出 0。
Sample input
1 2 3 4 5 6 7 8 6 10 23 7 4
Sample output
3 5 8 6 10 23 7 4
Notice
這題有病 by Morris
當然,你可以偷偷使用優化輸入的技巧。
123456789101112131415161718192021222324252627282930313233 #include <stdio.h>int hasEOF = 0;int readchar() { static int N = 1<<20; static char buf[1<<20]; static char p = buf, end = buf; if(p == end) { if((end = buf + fread(buf, 1, N, stdin)) == buf) { hasEOF = 1; return EOF; } p = buf; } return p++;}int ReadInt(int x) { char c, neg; while((c = readchar()) < '-') {if(c == EOF) return 0;} neg = (c == '-') ? -1 : 1; x = (neg == 1) ? c-'0' : 0; while((c = readchar()) >= '0') x = (x << 3) + (x << 1) + c-'0'; x = neg; return 1;}int main() { int x; while (ReadInt(&x)) { // add your code } // output your answer return 0;}