Untitled
unknown
plain_text
a year ago
6.7 kB
35
Indexable
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
#include <stdio.h>
#include <iostream>
using namespace std;
extern void init(int mBaseTime, int mBaseFee, int mUnitTime, int mUnitFee, int mCapacity);
extern int arrive(int mTime, int mCar);
extern int leave(int mTime, int mCar);
/////////////////////////////////////////////////////////////////////////
#define CMD_INIT 1
#define CMD_ARRIVE 2
#define CMD_LEAVE 3
static bool run() {
int q;
scanf("%d", &q);
int basetime, basefee, unittime, unitfee, capacity, mtime, mcar;
int cmd, ans, ret = 0;
bool okay = false;
for (int i = 0; i < q; ++i) {
scanf("%d", &cmd);
switch (cmd) {
case CMD_INIT:
scanf("%d %d %d %d %d", &basetime, &basefee, &unittime, &unitfee, &capacity);
init(basetime, basefee, unittime, unitfee, capacity);
okay = true;
break;
case CMD_ARRIVE:
scanf("%d %d %d", &mtime, &mcar, &ans);
ret = arrive(mtime, mcar);
if (ans != ret) {
cout<<"Arrive: "<<ret<<" "<<ans<<endl;
okay = false;
break;
}
case CMD_LEAVE:
scanf("%d %d %d", &mtime, &mcar, &ans);
ret = leave(mtime, mcar);
if (ans != ret) {
cout<<"Leave: "<<ret<<" "<<ans<<endl;
okay = false;
break;
}
default:
okay = false;
break;
}
}
return okay;
}
int main() {
setbuf(stdout, NULL);
freopen("sample_input.txt", "r", stdin);
int T, MARK;
scanf("%d %d", &T, &MARK);
for (int tc = 1; tc <= T; tc++) {
int score = run() ? MARK : 0;
printf("#%d %d\n", tc, score);
}
return 0;
}
/*
1 100
18
1 60 5000 20 300 5
2 10 200 0
2 30 100 0
2 50 700 0
2 80 600 0
3 90 200 5300
2 100 300 0
2 120 800 0
2 140 200 1
2 170 400 2
2 240 900 3
3 300 300 7100
3 310 900 -1
3 340 100 8900
2 350 500 1
2 400 900 2
3 420 200 5300
3 450 900 5000
100
1 121 18809 109 6723 7
2 4689 8965111 0
2 9948 3190676 0
2 12348 890815357 0
2 18667 6559618 0
2 21969 7410995 0
2 23161 9669600 0
2 28989 8358041 0
2 30857 9176750 1
2 31404 6133295 2
2 31691 9211756 3
2 32813 1257077 4
3 33271 6559618 912968
3 40571 9669600 1087766
2 43702 3358940 3
2 46343 3507877 4
2 48198 5835274 5
2 48897 6342555 6
3 53377 6342555 -1
3 59599 8965111 3400478
3 78185 9211756 1161719
2 81955 4727832 4
2 82017 1506673 5
2 86235 6342555 6
3 86335 3358940 -1
2 88258 7123765 6
2 89849 9669600 7
3 92351 7410995 4355144
3 94075 890815357 5054336
2 98637 890815357 6
2 101769 3737550 7
2 103196 5585359 8
3 110311 5835274 1013813
2 112742 3358940 8
3 116273 8358041 5397209
3 121136 5585359 -1
3 125056 9176750 5672852
3 125578 3358940 590264
2 134684 8358041 5
2 135745 9211756 6
2 138091 9176750 7
2 138215 3391221 8
3 141908 6342555 1961756
3 155061 8358041 -1
3 158489 3190676 9175535
2 164773 8358041 6
2 169008 3190676 7
3 172403 3507877 4953491
2 173585 3507877 7
2 174631 991918505 8
2 177862 3024638 9
2 178277 4452159 10
3 179560 9669600 455804
2 181516 6559618 10
2 182242 7127941 11
2 184322 8965111 12
3 191731 4452159 -1
2 194250 5553147 12
2 197669 2130440 13
3 200556 991918505 -1
2 201327 6342555 13
2 203082 1572395 14
2 204363 991918505 15
2 209585 5771907 16
2 211942 4753520 17
3 217344 3737550 3642506
2 218917 4452159 17
2 221161 8591627 18
2 223391 5835274 19
2 225398 9500590 20
2 226434 5585359 21
2 228929 2816733 22
3 229505 7127941 -1
2 229693 8270622 22
2 230059 3358940 23
2 230213 491661 24
2 230302 8527314 25
3 232100 4727832 6614072
2 234403 3737550 25
2 234785 7127941 26
2 236702 9712254 27
2 249160 364095 28
2 250414 5747388 29
2 254432 4574853 30
3 255055 8527314 -1
2 256737 1373085 30
3 259012 3024638 1672667
2 262826 3187149 30
3 268424 8270622 -1
2 269758 6465509 30
2 273007 785196746 31
2 274876 1791195 32
2 285319 989800 33
2 292203 8527314 34
2 295974 3024638 35
2 297005 4727832 36
3 297220 6133295 15844751
3 297679 6559618 -1
2 299347 4402659 35
3 299599 9211756 7420832
#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 ) / 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