天梯赛 L1-043 阅览室 (20 分)
2019-03-02 16:21
489 查看
L1-043 阅览室 (20 分)
天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下
S键,程序开始计时;当读者还书时,管理员输入书号并按下
E键,程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号输入时,表示一天工作结束,你的程序应输出当天的读者借书次数和平均阅读时间。
注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有
S没有
E,或者只有
E没有
S的纪录,系统应能自动忽略这种无效纪录。另外,题目保证书号是书的唯一标识,同一本书在任何时间区间内只可能被一位读者借阅。
输入格式:
输入在第一行给出一个正整数N(≤10),随后给出N天的纪录。每天的纪录由若干次借阅操作组成,每次操作占一行,格式为:
书号([1, 1000]内的整数)
键值(
S或
E)
发生时间(
hh:mm,其中
hh是[0,23]内的整数,
mm是[0, 59]内整数)
每一天的纪录保证按时间递增的顺序给出。
输出格式:
对每天的纪录,在一行中输出当天的读者借书次数和平均阅读时间(以分钟为单位的精确到个位的整数时间)。
输入样例:
[code]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
输出样例:
[code]2 196 0 0 1 60
解题思路
首先,n是天数,不是输入行数,当输入了n个0之后,结束。博主是用一个数组start[][2]来保存编号为i的书的借出时间,先初始化start[][2]为-1, 当遇到E的时候,如果start[i][1]不是-1的话,就说明前面有一个i S,是有效的, 把次数和时间加上去。当遇到0的时候,输出答案,把各项重新初始化。
以下为坑点,1.可能在同一天里面出现1 S ,1 E, 1 E的情况。这种情况第二个1 E是无效的。所以在得出前一个的时候,要把start[i][1]重新设为-1。2.可能在不同天里面出现1 S和1 E的,所以在一天结束的时候,要把start[][2]重新设为1。3.这点此方法已经避免了,就是可能在1 E出现前出现多个1 S,取最后一个。
代码如下
[code]#include <iostream> #include <cstdio> #include <cstring> #define maxn 1005 using namespace std; int start[maxn][2]; double gap(int x1, int y1, int x2, int y2) { if(y1 < y2){ x1 --; y1 += 60; } double ans = (double)y1 - y2 + (double)(x1 - x2) * 60.0; return ans; } int main() { int n; while(cin >> n){ memset(start, -1, sizeof(start)); int ans = 0; double t = 0; int x = 0; while(x != n){ int num; char ch; int minu, sec; scanf("%d %c %d:%d", &num, &ch, &minu, &sec); if(num == 0){ if(ans != 0){ printf("%d %.lf\n", ans, t / (double)ans); } else cout << 0 << " " << 0 << endl; x ++; ans = 0; t = 0; memset(start, -1, sizeof(start)); continue; } if(ch == 'S'){ start[num][0] = minu; start[num][1] = sec; } else if(ch == 'E'){ if(start[num][0] != -1){ ans ++; t += gap(minu, sec, start[num][0], start[num][1]); start[num][0] = -1; } } } } return 0; }
相关文章推荐
- PAT 天梯赛 L1-043. 阅览室 【STL】
- PAT - 天梯赛 L1-043 阅览室
- PAT 天梯赛 L1-043 阅览室
- PAT L1 043 阅览室
- L1-043. 阅览室
- L1-043. 阅览室
- L1-043. 阅览室
- L1-043. 阅览室
- L1-043. 阅览室
- L1-043. 阅览室
- PAT L1-043. 阅览室
- L1-043. 阅览室
- L1-043. 阅览室
- 团体程序设计天梯赛-练习集L1-046 整除光棍 (20 分)
- L1-043. 阅览室
- 团体程序设计天梯赛-练习集L1-049 天梯赛座位分配 (20 分)
- L1-3 阅览室(20 分)
- L1-043. 阅览室
- L1-043 阅览室(坑坑坑。。完整测试点分析。)
- L1-043. 阅览室