Pagini recente » Cod sursa (job #2537964) | Cod sursa (job #1182356) | Cod sursa (job #1746169) | Clasament faherhe | Cod sursa (job #2550282)
/**
* InfoArena
* problema Hotel
* Varianta ineficienta, vector
*/
#include <iostream>
#include <fstream>
#define MAXROOMS 100001
using namespace std;
ifstream fin;
ofstream fout;
int n, p; //nr of rooms, nr of instructions
int type; // 1/2/3 depending on the instruction given
int rooms[MAXROOMS]; /* -1 if the room is busy; 1 <= x <= n if the room is empty
* x = the number of consecutive available rooms starting with the current room
*/
void initRooms()
{
rooms[0] = -1;
rooms[n+1] = -1;
for (int i=1; i<=n; i++)
{
rooms[i] = n - i + 1;
}
}
void checkRooms() //debugging function
{
for (int i=1; i<=n; i++)
cout << rooms[i] << " ";
cout << '\n';
}
void fill(int start, int nrConsStart)
{
int i = start, nrCons = nrConsStart;
while(rooms[i] != -1)
{
rooms[i] = nrCons;
nrCons++;
i--;
}
}
void set1(int firstRoom, int nrMembers) //group comes
{
for (int i=firstRoom; i<=firstRoom + nrMembers - 1; i++)
{
rooms[i] = -1;
}
fill(firstRoom-1, 1);
}
void set2(int firstRoom, int nrMembers) //group leaves
{
for (int i=firstRoom + nrMembers - 1; i>=firstRoom; i--)
{
if(rooms[i+1] != -1)
rooms[i] = rooms[i+1] + 1;
else rooms[i] = 1;
}
fill(firstRoom - 1, rooms[firstRoom] + 1);
}
void set3() //manager's question
{
int maxCons = 0;
for (int i=1; i<=n; i++)
{
if (rooms[i] > maxCons)
maxCons = rooms[i];
}
fout << maxCons << '\n';
}
int main() {
fin.open("hotel.in");
fout.open("hotel.out");
fin >> n >> p;
initRooms();
for (int instruction=1; instruction<=p; instruction++)
{
fin >> type;
checkRooms();
if (type == 1) {
int firstRoom, nrMembers;
fin >> firstRoom >> nrMembers;
set1(firstRoom, nrMembers);
}
if (type == 2){
int firstRoom, nrMembers;
fin >> firstRoom >> nrMembers;
set2(firstRoom, nrMembers);
}
if (type == 3) {
set3();
}
}
fin.close();
fout.close();
return 0;
}