Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 6

#include <iostream>

#include <string>
#include <vector>

using namespace std;

class Time {
public:
Time() : m_hour(0), m_minute(0) {}
Time(int hour, int minute) : m_hour(hour), m_minute(minute) {}

int hour() const { return m_hour; }


int minute() const { return m_minute; }

void setHour(int hour) { m_hour = hour; }


void setMinute(int minute) { m_minute = minute; }

Time operator+(const int& minutes) const {


int totalMinutes = m_hour * 60 + m_minute + minutes;
int newHour = totalMinutes / 60 % 24;
int newMinute = totalMinutes % 60;
return Time(newHour, newMinute);
}

std::string toString() const {


char buffer[6];
std::snprintf(buffer, sizeof(buffer), "%02d:%02d", m_hour, m_minute);
return std::string(buffer);
}

private:
int m_hour;
int m_minute;
};

int main()
{
char ferryHarbor = 'L';
int capacity;
cin >> capacity;

vector<string> cars;
vector<string>carsL;
vector<string>carsR;

cars.resize(1);
carsL.resize(1);
carsR.resize(1);

int counter = 0;
int counterL = 0;
int counterR = 0;

int writeL = 0;
int writeR = 0;

string present_time;
vector <string> results;
results.resize(1);
unsigned int counter_result = 0;
cin.ignore();

while (true)
{
if (cin.eof())
{
if (ferryHarbor == 'L' && counterL >= capacity + writeL)
{
int tmp;

if (writeL == 0)
{
Time time(stoi(carsL[writeL + capacity - 1].substr(2, 2)),
stoi(carsL[writeL + capacity - 1].substr(5, 2)));
present_time = time.toString();
}

if (present_time.substr(0, 2) == carsL[writeL + capacity -


1].substr(2, 2))
{
if (stoi(present_time.substr(3, 2)) <= stoi(carsL[writeL +
capacity - 1].substr(5, 2)))
{
present_time = carsL[writeL + capacity - 1].substr(2, 2) +
":" + carsL[writeL + capacity - 1].substr(5, 2);
}
else
{
present_time = present_time;
}
}
else if (stoi(present_time.substr(0, 2)) < stoi(carsL[writeL +
capacity - 1].substr(2, 2)))
{
present_time = carsL[writeL + capacity - 1].substr(2, 2) + ":"
+ carsL[writeL + capacity - 1].substr(5, 2);
}
else
{
present_time = present_time;
}

Time time(stoi(present_time.substr(0, 2)),


stoi(present_time.substr(3, 2)));
Time newTime = time + 5;

results[counter_result] = "The ferry departed at " + present_time +


" from the left bank.";
counter_result++;
results.resize(counter_result + 1);

for (int i = writeL; i < writeL + capacity; i++)


{
results[counter_result] = "The car arrived at " +
carsL[i].substr(2, 2) + ":" + carsL[i].substr(5, 2) + " and left at " +
newTime.toString() + ".";
counter_result++;
results.resize(counter_result + 1);
tmp = i;
}

present_time = newTime.toString();
writeL = tmp + 1;
ferryHarbor = 'P';
}
if (ferryHarbor == 'P' && counterR >= capacity + writeR)
{
int tmp;

if (present_time.substr(0, 2) == carsR[writeR + capacity -


1].substr(2, 2))
{
if (stoi(present_time.substr(3, 2)) <= stoi(carsR[writeR +
capacity - 1].substr(5, 2)))
{
present_time = carsR[writeR + capacity - 1].substr(2, 2) +
":" + carsR[writeR + capacity - 1].substr(5, 2);
}
else
{
present_time = present_time;
}
}
else if (stoi(present_time.substr(0, 2)) < stoi(carsR[writeR +
capacity - 1].substr(2, 2)))
{
present_time = carsR[writeR + capacity - 1].substr(2, 2) + ":"
+ carsR[writeR + capacity - 1].substr(5, 2);
}
else
{
present_time = present_time;
}

Time time(stoi(present_time.substr(0, 2)),


stoi(present_time.substr(3, 2)));
Time newTime = time + 7;

results[counter_result] = "The ferry departed at " + present_time +


" from the right bank.";
counter_result++;
results.resize(counter_result + 1);

for (int i = writeR; i < writeR + capacity; i++)


{
results[counter_result] = "The car arrived at " +
carsR[i].substr(2, 2) + ":" + carsR[i].substr(5, 2) + " and left at " +
newTime.toString() + ".";
counter_result++;
results.resize(counter_result + 1);
tmp = i;
}
present_time = newTime.toString();
writeR = tmp + 1;
ferryHarbor = 'L';
}

break;
}
else {
getline(cin, cars[counter]);
}
if (cars[counter].substr(0, 1) == "L")
{
carsL[counterL] = cars[counter];
counterL++;
carsL.resize(counterL + 1);

}
else if (cars[counter].substr(0, 1) == "P")
{
carsR[counterR] = cars[counter];
counterR++;
carsR.resize(counterR + 1);
}

if (ferryHarbor == 'L' && counterL >= capacity + writeL)


{
int tmp;

if (writeL == 0)
{
Time time(stoi(carsL[writeL + capacity - 1].substr(2, 2)),
stoi(carsL[writeL + capacity - 1].substr(5, 2)));
present_time = time.toString();
}

if (present_time.substr(0, 2) == carsL[writeL + capacity - 1].substr(2,


2))
{
if (stoi(present_time.substr(3, 2)) <= stoi(carsL[writeL + capacity
- 1].substr(5, 2)))
{
present_time = carsL[writeL + capacity - 1].substr(2, 2) + ":"
+ carsL[writeL + capacity - 1].substr(5, 2);
}
else
{
present_time = present_time;
}
}
else if (stoi(present_time.substr(0, 2)) < stoi(carsL[writeL + capacity
- 1].substr(2, 2)))
{
present_time = carsL[writeL + capacity - 1].substr(2, 2) + ":" +
carsL[writeL + capacity - 1].substr(5, 2);
}
else
{
present_time = present_time;
}

Time time(stoi(present_time.substr(0, 2)), stoi(present_time.substr(3,


2)));
Time newTime = time + 5;

results[counter_result] = "The ferry departed at " + present_time + "


from the left bank.";
counter_result++;
results.resize(counter_result + 1);

for (int i = writeL; i < writeL + capacity; i++)


{
results[counter_result] = "The car arrived at " +
carsL[i].substr(2, 2) + ":" + carsL[i].substr(5, 2) + " and left at " +
newTime.toString() + ".";
counter_result++;
results.resize(counter_result + 1);
tmp = i;
}

present_time = newTime.toString();
writeL = tmp + 1;
ferryHarbor = 'P';
}
if (ferryHarbor == 'P' && counterR >= capacity + writeR)
{
int tmp;

if (present_time.substr(0, 2) == carsR[writeR + capacity - 1].substr(2,


2))
{
if (stoi(present_time.substr(3, 2)) <= stoi(carsR[writeR + capacity
- 1].substr(5, 2)))
{
present_time = carsR[writeR + capacity - 1].substr(2, 2) + ":"
+ carsR[writeR + capacity - 1].substr(5, 2);
}
else
{
present_time = present_time;
}
}
else if (stoi(present_time.substr(0, 2)) < stoi(carsR[writeR + capacity
- 1].substr(2, 2)))
{
present_time = carsR[writeR + capacity - 1].substr(2, 2) + ":" +
carsR[writeR + capacity - 1].substr(5, 2);
}
else
{
present_time = present_time;
}

Time time(stoi(present_time.substr(0, 2)), stoi(present_time.substr(3,


2)));
Time newTime = time + 7;

results[counter_result] = "The ferry departed at " + present_time + "


from the right bank.";
counter_result++;
results.resize(counter_result + 1);
for (int i = writeR; i < writeR + capacity; i++)
{
results[counter_result] = "The car arrived at " +
carsR[i].substr(2, 2) + ":" + carsR[i].substr(5, 2) + " and left at " +
newTime.toString() + ".";
counter_result++;
results.resize(counter_result + 1);
tmp = i;
}
present_time = newTime.toString();
writeR = tmp + 1;
ferryHarbor = 'L';
}
counter++;
cars.resize(counter + 1);
}

for (unsigned int i = 0; i < counter_result; i++)


{
cout << results[i] << endl;
}

return 0;
}

You might also like