Untitled
unknown
plain_text
a year ago
2.6 kB
11
Indexable
#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;
}
Editor is loading...
Leave a Comment