Untitled
unknown
plain_text
12 days ago
2.6 kB
3
Indexable
Never
#include <unordered_map> #include <set> #include <algorithm> #include <vector> #include <iostream> #include <cstring> using namespace std; struct cmp { bool operator()(pair<int, int> a, pair<int, int> b) const { return a.second < b.second; // So sánh dựa trên thời gian đến } }; set<pair<int, int>, cmp> se; unordered_map<int, int> mp; // Map xe -> thời gian đến unordered_map<int, int> q; // Map xe -> thời gian đến trong hàng đợi vector<int> parking; int baseTime, baseFee, unitTime, unitFee, capacity; void init(int mBaseTime, int mBaseFee, int mUnitTime, int mUnitFee, int mCapacity) { parking.clear(); se.clear(); mp.clear(); q.clear(); // Xóa dữ liệu hàng đợi baseTime = mBaseTime; baseFee = mBaseFee; unitFee = mUnitFee; unitTime = mUnitTime; capacity = mCapacity; } int arrive(int mTime, int mCar) { int capaCur = mp.size(); if (capaCur >= capacity) { // Kiểm tra nếu bãi đầy, thêm vào hàng đợi se.insert(make_pair(mCar, mTime)); q[mCar] = mTime; } else { // Thêm vào bãi đỗ mp[mCar] = mTime; } return se.size(); // Trả về số lượng xe đang trong hàng đợi } int leave(int mTime, int mCar) { int res = 0; // Trường hợp xe không có trong bãi đỗ (tức là xe nằm trong hàng đợi) if (mp.find(mCar) == mp.end()) { auto it = se.find(make_pair(mCar, q[mCar])); if (it != se.end()) { se.erase(it); } return -1; // Xe không có trong bãi đỗ } else { // Xe có trong bãi đỗ int t = mp[mCar]; // Thời gian xe vào bãi int parkedTime = mTime - t; // Thời gian đỗ xe // Tính phí đỗ xe if (parkedTime <= baseTime) { res = baseFee; // Phí cơ bản } else { res = baseFee + ((parkedTime - baseTime + unitTime - 1) / unitTime) * unitFee; // Phí bổ sung theo đơn vị thời gian } // Xóa xe ra khỏi bãi đỗ mp.erase(mCar); // Kiểm tra xem có xe nào trong hàng đợi không và chuyển nó vào bãi nếu còn chỗ if (!se.empty()) { auto it = se.begin(); int carInQueue = it->first; int timeInQueue = it->second; se.erase(it); mp[carInQueue] = timeInQueue; // Di chuyển xe từ hàng đợi vào bãi đỗ q.erase(carInQueue); // Xóa xe khỏi hàng đợi } return res; // Trả về phí đỗ xe } return 0; }
Leave a Comment