Untitled

mail@pastecode.io avatar
unknown
plain_text
12 days ago
6.7 kB
10
Indexable
Never
#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;
}
*/
Leave a Comment