L1-043. 閱覽室

L1-043. 閱覽室

天梯圖書閱覽室請你編寫一個簡單的圖書借閱統計程序。當讀者借書時,管理員輸入書號並按下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



/**
1.用時間軸來計算借閱時間。
2.注意同一本書同一天可能借閱n次,每次都要計算。
3.精確到個位:四捨五入
*/
#include <bits/stdc++.h>
#include <string>
using namespace std;

const int maxn = 1000+10;

int main(){
    int n,d;
    char c;
    int h,m;
    bool vis[maxn];
    int mint[maxn];///時間軸
    scanf("%d",&n);
    getchar();
    for(int i = 0;i<n;++i){
        memset(vis,0,sizeof(vis));
        memset(mint,0,sizeof(mint));
        int num = 0;
        int sum = 0;///總時間
        while(1){
            scanf("%d %c %d:%d",&d,&c,&h,&m);
            getchar();
            if(d==0) break;
            if(c=='S'){
                mint[d]=h*60+m;
                vis[d] = 1;
            }
            else{
                if(!vis[d]) continue;///保證今天被借過
                sum+=h*60+m-mint[d];
                vis[d] = 0;///標誌爲未借閱狀態
                num ++;
            }
        }
        if(num ==0) printf("0 0\n");
        else{
            sum = 1.0*sum/num + 0.5;
            printf("%d %d\n",num,sum);
        }
    }

    return 0;
}

發佈了229 篇原創文章 · 獲贊 252 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章