Untitled

 avatar
unknown
plain_text
5 months ago
2.2 kB
2
Indexable
#include <unordered_map>
#include <unordered_set>
#include <queue>
#include <cstring>
using namespace std;

struct Theater{
	int seat[101];
	int slot;
} theater[2001];

struct cmp{
	bool operator() (int a, int b) {
		return a > b;
	}
};

int n;
int dir[4] = {-10, 1, 10, -1};
unordered_map<int, pair<int, int>> mp;

struct Result {
	int id;
	int num;
};

void init(int N)
{
	n = N;
	mp.clear();
	for(int i=1; i<=n; i++) {
		theater[i].slot = 100;
		for(int j = 1; j<=100; j++) {
			theater[i].seat[j] = 0;
		}
	}
}

bool bfs(int tId, int seat, int mId, int k) {
	int cnt = 0;
	int visit[101];
	memset(visit, 0, sizeof(visit));
	priority_queue<int, vector<int>, cmp> pq;
	pq.push(seat);
	visit[seat] = 1;
	while(!pq.empty()) {
		int curSeat= pq.top();
		pq.pop();
		cnt++;
		if(cnt == k) break;
		visit[curSeat] = 1;
		for(int k = 0; k<4; k++) {
			int nextSeat = curSeat + dir[k];
			if(nextSeat > 0 && nextSeat < 101) {
				if(!visit[nextSeat] && !theater[tId].seat[nextSeat]) {
					pq.push(nextSeat);
					visit[nextSeat] = 1;
				}
			}
		}
	}
	if(cnt == k) {
		for(int i=1; i<101; i++) {
			if(visit[i] == 1) {
				theater[tId].seat[i] = mId;
			}
		}
		return true;
	}
	return false;
}

Result reserveSeats(int mID, int K)
{
	Result res;

	for(int tId=1; tId<=n; tId++) {
		if(theater[tId].slot >= K) {
			for(int seatt=1; seatt<=100; seatt++) {
				if(theater[tId].seat[seatt] == 0 && bfs(tId, seatt, mID, K)) {
					
					pair<int, int> infor;
					infor.first = tId;
					infor.second = seatt;

					mp[mID] = infor;

					theater[tId].slot -= K;
					res.id = tId;
					res.num = seatt;
					return res;
				}
			}
		}
	}
	res.id = 0;
	res.num = 0;
	return res;
}

Result cancelReservation(int mID)
{
	Result res;
	int cnt = 0;
	int sum = 0;
	pair<int, int> infor;
	infor = mp[mID];
	int tId = infor.first;
	int seat = infor.second;

	for(int i=seat; i<101; i++) {
		if(theater[tId].seat[i] == mID) {
			cnt++; 
			sum+=i;
			theater[tId].seat[i] = 0;
		}
	}
	mp.erase(mID);
	theater[tId].slot += cnt;

	res.id = tId;
	res.num = 0;
	return res;
}
Editor is loading...
Leave a Comment