L1-043 閱覽室 (20分)
天梯圖書閱覽室請你撰寫一個簡單的圖書借閱統計程式,當讀者借書時,管理員輸入書號并按下 S 鍵,程式開始計時;當讀者還書時,管理員輸入書號并按下 E 鍵,程式結束計時,書號為不超過 \(1000\) 的正整數,當管理員將 \(0\) 作為書號輸入時,表示一天作業結束,你的程式應輸出當天的讀者借書次數和平均閱讀時間,
注意:由于線路偶爾會有故障,可能出現不完整的紀錄,即只有 S 沒有 E,或者只有 E 沒有 S 的紀錄,系統應能自動忽略這種無效紀錄,另外,題目保證書號是書的唯一標識,同一本書在任何時間區間內只可能被一位讀者借閱,
輸入格式:
輸入在第一行給出一個正整數 \(N \; (\leq 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;
int n,id,h,m,tot,s[1005];
double ave;
bool vis[1005];
char x,y;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
memset(vis,0,sizeof(vis));
memset(s,0,sizeof(s));
tot=ave=0;
while(1)
{
cin>>id>>x>>h>>y>>m;
if(id==0)break;
if(x=='E'&&!vis[id])continue;
else if(x=='E')
{
vis[id]=0;
tot++;
ave+=h*60+m-s[id];
}
else if(x=='S')
{
vis[id]=1;
s[id]=h*60+m;
}
}
if(tot==0)cout<<0<<' '<<0<<endl;
else cout<<tot<<' '<<fixed<<setprecision(0)<<ave*1.0/tot<<endl;
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/4973.html
標籤:C++
