L1-043. 閱覽室

//這道題一直有一個測試點過不去,花了近一個小時終於找到錯誤的地方了,也提醒一下大家。最後平均時間應該四捨五入,我剛開始用的是ceil而不是四捨五入的函數round。以後這類題一定會注意的。!!!

L1-043. 閱覽室

時間限制
400 ms
內存限制
65536 kB
代碼長度限制
8000 B
判題程序
Standard
作者
陳越

天梯圖書閱覽室請你編寫一個簡單的圖書借閱統計程序。當讀者借書時,管理員輸入書號並按下S鍵,程序開始計時;當讀者還書時,管理員輸入書號並按下E鍵,程序結束計時。書號爲不超過1000的正整數。當管理員將0作爲書號輸入時,表示一天工作結束,你的程序應輸出當天的讀者借書次數和平均閱讀時間。

注意:由於線路偶爾會有故障,可能出現不完整的紀錄,即只有S沒有E,或者只有E沒有S的紀錄,系統應能自動忽略這種無效紀錄。另外,題目保證書號是書的唯一標識,同一本書在任何時間區間內只可能被一位讀者借閱。

輸入格式:

輸入在第一行給出一個正整數N(<= 10),隨後給出N天的紀錄。每天的紀錄由若干次借閱操作組成,每次操作佔一行,格式爲:

書號([1, 1000]內的整數) 鍵值(“S”或“E”) 發生時間(hh:mm,其中hh是[0,23]內的整數,mm是[0, 59]內整數)

每一天的紀錄保證按時間遞增的順序給出。

輸出格式:

對每天的紀錄,在一行中輸出當天的讀者借書次數和平均閱讀時間(以分鐘爲單位的精確到個位的整數時間)。

輸入樣例:
3
1 S 08:10
2 S 08:35
1 E 10:00
2 E 13:16
0 S 17:00
0 S 17:00
3 E 08:10
1 S 08:20
2 S 09:00
1 E 09:20
0 E 17:00
輸出樣例:
2 196
0 0
1 60

分析:其實不用要數組存時分,統統按分鐘算省事,快。

我的程序:

#include <bits/stdc++.h>
using namespace std;
string a;   
int main()  
{  int flag[1002];
   int mi[1002];
   int hh,mm,id;
   int n;scanf("%d",&n); 
   if(n<0) return 0;
   for(int i=0;i<n;i++){
     char ch;  double sum=0;  int s=0;
     memset(flag,0,sizeof(flag));   memset(mi,0,sizeof(mi));
     while(scanf("%d%*c %c %d:%d",&id,&ch,&hh,&mm)){
     if(id==0) {if(s==0) {cout<<"0 0"<<endl;break;}
                else cout<<s<<" "<<round(sum/s)<<endl;
                break;}
     if(ch=='S') {flag[id]=1; mi[id]=hh*60+mm;}
     else      {if(flag[id]==1){s++;sum+=(hh*60+mm-mi[id]);flag[id]=0;}}
   }
}
   return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章