Untitled
unknown
plain_text
5 months ago
3.0 kB
2
Indexable
#include <iostream> #include <unordered_set> #include <queue> #include <cstring> #include <unordered_map> using namespace std; struct cmp { bool operator()(const int& a, const int& b) const { // Custom comparison logic here return a > b; // Example: Compare in descending order } }; struct node { int seat[101]; int avail; } theatre[2001]; int visit[101]; unordered_map <int, int> m; struct Result { int id; int num; }; int n = 0; int dir[4] = { 1,-1,10,-10 }; void init(int N) { n = N; m.clear(); for (int i = 1; i <= n; i++) { theatre[i].avail = 100; for (int j = 1; j < 101; j++) { theatre[i].seat[j] = 0; } } memset(visit, 0, sizeof(visit)); } bool bfs(int tid, int seat, int k, int mid) { int booked[101]; memset(booked, 0, sizeof(booked)); priority_queue <int, vector<int>, cmp> pq; pq.push(seat); booked[seat] = 1; int cnt = 0; while (!pq.empty()) { int currSeat = pq.top(); pq.pop(); booked[currSeat] = 1; cnt++; if (cnt == k) break; for (int d = 0; d < 4; d++) { int nextSeat = currSeat + dir[d]; if (currSeat % 10 == 0 && dir[d] == 1) continue; if (currSeat % 10 == 1 && dir[d] == -1) continue; if (visit[nextSeat] == 0 && booked[nextSeat] == 0 && theatre[tid].seat[nextSeat] == 0 && (nextSeat > 0 && nextSeat < 101)) { pq.push(nextSeat); visit[nextSeat] = 1; } } } if (cnt == k) { for (int i = 1; i < 101; i++) { if (booked[i] == 1) { theatre[tid].seat[i] = mid; } } return true; } return false; } Result reserveSeats(int mID, int K) { Result res; for (int i = 1; i <= n; i++) { if (theatre[i].avail >= K) { memset(visit, 0, sizeof(visit)); for (int j = 1; j < 101; j++) { if (visit[j] == 0 && theatre[i].seat[j] == 0 && bfs(i, j, K, mID)) { theatre[i].avail -= K; m[mID] = i; res.id = i; res.num = j; return res; } } } } res.id = 0; res.num = 0; return res; } Result cancelReservation(int mID) { int sum = 0; int tid = m[mID]; int cnt = 0; for (int i = 1; i < 101; i++) { if (theatre[tid].seat[i] == mID) { sum += i; theatre[tid].seat[i] = 0; cnt++; } } m[mID] = 0; theatre[tid].avail += cnt; Result res; res.id = tid; res.num = sum; return res; }
Editor is loading...
Leave a Comment