#include<iostream>
#include<string>
#include<sstream>
#include<vector>
#include<unordered_set>
#include<unordered_map>
#include<algorithm>
using namespace std;
struct Info {
    string time;
    string carid;
    string enorle;
};
int toMinutes(string time) {
    stringstream ss(time);
    int hour;
    char ch;
    int minute;
    ss >> hour >> ch >> minute;
    return hour * 60 + minute;
}
int cost(int start, int end) {
    if (end - start < 30) {
        return 0;
    }
    int startex = 11 * 60 + 30;
    int endex = 13 * 60 + 30;
    int lasting = end - start;
    int overlap = max(0,min(end, endex) - max(start, startex));//免费时段重叠时间,防止不在重叠区间出现负值
    lasting -= overlap;
    if (lasting >= 8 * 60) {
        return 8 * 2;
    }
    else {
        /*return lasting % 30 ? (lasting / 30 + 1 ): (lasting / 30);*/
        return (lasting + 29) / 30;
    }
}
int main() {
    int n;
    cin >> n;
    cin.ignore();
    string temp;
    getline(cin, temp);
    stringstream ss(temp);
    unordered_set<string> uset;
    string t;
    for (int i = 0; i < n; i++) {
        ss >> t;
        uset.insert(t);
    }
    vector<Info> vec;//存放所有不包月的车的进出信息
    string perinfo;
    while (getline(cin, perinfo)) {
        string curt;
        Info cur;
        stringstream s1(perinfo);
        s1 >> curt;
        cur.time = curt;
        s1 >> curt;
        cur.carid = curt;
        if (uset.find(cur.carid) != uset.end()) {
            continue;//包月的,不统计
        }
        s1 >> curt;
        cur.enorle = curt;
        vec.push_back(cur);
    }
    //按车牌分组,键值string车牌号,值:进出时间(可能同一辆车多次进出)
    unordered_map<string, vector<pair<int, int>>> ump;
    for (Info it : vec) {
        string curid = it.carid;
        if (it.enorle == "enter") {
            int start = toMinutes(it.time);
            ump[curid].push_back({start,-1});//用-1先占位
        }
        else {
            int end = toMinutes(it.time);
            ump[curid].back().second = end;//代替-1
        }
        
    }
    int res = 0;
    for (auto it = ump.begin(); it != ump.end(); it++) {
        //it->first是车牌号,it->second是vector<pair<int, int>>进出时间数组
        vector<pair<int, int>> curidinfo= it->second;
        for (int i = 0; i < curidinfo.size(); i++) {
            res+=cost(curidinfo[i].first, curidinfo[i].second);
        }
    }
    cout << res;
    return 0;
}

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐