L1-043 阅览室 分数 20

注意有大坑:题目没有说,如果同一个书号出现两个'S',按照后者记时(一本书在未归还时被多次借出,记录取后者)。

// long
#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
int main()
{
    int n;
    cin >> n;
    map<int, pair<bool,int> > borw;
    int sumtime = 0, amount = 0;
    int cnt = 0;
    while(cnt < n)
    {
        int bnum;
        char c, emp;
        int n1, n2;
        cin >> bnum >> c >> n1 >> emp >> n2;
        if(bnum > 1000) continue;
        if(bnum == 0)
        {
        	++ cnt;
        	cout << amount << " " << (amount == 0 ? 0 : round((double)(sumtime) / (double)(amount))) << endl;
        	amount = 0;
        	sumtime = 0;
        	borw.clear();
        	continue;
        }
        if(c == 'S')
        {
            // 此处不能加限制条件,否则测试点1会被卡
            //if(borw[bnum].x == false)
            //{
        	borw[bnum].x = true;
        	borw[bnum].y = n1 * 60 + n2;
            //}
        }
        else if(c == 'E')
        {
        	if(borw[bnum].x == true)
        	{
        		sumtime += n1 * 60 + n2 - borw[bnum].y;
        		borw[bnum].x = false;
        		borw[bnum].y = 0;
        		++ amount;
        	}
        }
     }
    return 0;
}
posted @ 2024-08-21 01:08  Frodnx  阅读(13)  评论(0)    收藏  举报