Untitled
unknown
plain_text
a year ago
3.0 kB
5
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