题目链接
L1-043 阅览室
分数 20
作者 陈越
单位 浙江大学
天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号输入时,表示一天工作结束,你的程序应输出当天的读者借书次数和平均阅读时间。
注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有S没有E,或者只有E没有S的纪录,系统应能自动忽略这种无效纪录。另外,题目保证书号是书的唯一标识,同一本书在任何时间区间内只可能被一位读者借阅。
注意算“平均阅读时间(以分钟为单位的精确到个位的整数时间)”时,要四舍五入,否则第5个测试用例无法通过
#include<iostream>
#include<string>
using namespace std;
typedef struct {
bool tag; //用于标记该数据项是否有效
string time;
}One;
One one[1005];
int f(int x, int y) { //四舍五入--->y/x
y *= 10;
y /= x;
x = y % 10;
if (x >= 5) y += 10;
return y /= 10;
}
int subtra(string x, string y) { //以分钟为单位,计算时间差---> x-y
int x1 = stoi(x.substr(0, 2));
int y1 = stoi(x.substr(3, 2));
int x2 = stoi(y.substr(0, 2));
int y2 = stoi(y.substr(3, 2));
return x1 * 60 + y1 - (x2 * 60 + y2);
}
int main() {
int N,ans1,ans2;
int num;
char ch;
string time;
cin >> N;
ans1 = ans2 = 0;
while (N) {
cin >> num >> ch >> time;
if (num == 0) {
N--;
if (ans1 == 0) {
cout << "0 0" << endl;
}
else {
ans2 = f(ans1, ans2);
cout << ans1 << " " << ans2 << endl;
}
ans1 = ans2 = 0;
}
else {
if (ch == 'S') {
one[num].tag = true;
one[num].time = time;
}
else {
if (!one[num].tag) continue;
one[num].tag = false;
ans1++;
ans2 += subtra(time, one[num].time);
}
}
}
return 0;
}