// Videogame.cpp : This file contains the 'main' function. Program execution begins and ends there.
//
#include <iostream>
#include <vector>
using namespace std;
#define int long long
int T;
int lastPlayedGlobal;
struct interval {
int beginning;
int end;
};
char intersectionType(interval Me, interval Hano) {
if (Me.beginning <= Hano.beginning && Me.end >= Hano.beginning) return 'M'; //Intersection when I start playing first
if (Me.beginning >= Hano.beginning && Hano.end >= Me.beginning) return 'H'; //Intersection when Hano starts playing first
return 'N'; //No intersection
}
int calcPlayTime(interval Me, interval Hano) {
char iType = intersectionType(Me, Hano);
if (iType == 'N') return 0;
if (iType == 'H') return min(Hano.end, Me.end) - Me.beginning + 1;
if (iType == 'M') {
if (lastPlayedGlobal + T >= Hano.beginning) {
return min(Hano.end, Me.end) - Hano.beginning + 1;
}
else return 0;
}
}
signed main()
{
cin >> T;
int meIntervalCount, hanoIntervalCount;
cin >> meIntervalCount;
vector<interval> meIntervals;
vector<interval> hanoIntervals;
for (size_t i = 0; i < meIntervalCount; i++)
{
int a, b;
cin >> a >> b;
meIntervals.push_back({ a,b });
}
cin >> hanoIntervalCount;
for (size_t i = 0; i < hanoIntervalCount; i++)
{
int a, b;
cin >> a >> b;
hanoIntervals.push_back({ a,b });
}
int hanoIntervalIndex = 0;
int meIntervalIndex = 0;
lastPlayedGlobal = meIntervals[0].beginning;
int MaxPlayTime = 0;
while (true) {
MaxPlayTime+=calcPlayTime(meIntervals[meIntervalIndex], hanoIntervals[hanoIntervalIndex]);
if (meIntervals[meIntervalIndex].end >= hanoIntervals[hanoIntervalIndex].end) {
lastPlayedGlobal = hanoIntervals[hanoIntervalIndex].end;
hanoIntervalIndex++;
if (hanoIntervalIndex == hanoIntervalCount) {
cout << MaxPlayTime << "\n";
return 0;
}
}
else {
meIntervalIndex++;
if (meIntervalIndex == meIntervalCount) {
cout << MaxPlayTime << "\n";
return 0;
}
else lastPlayedGlobal = meIntervals[meIntervalIndex].beginning;
}
}
}
// Run program: Ctrl + F5 or Debug > Start Without Debugging menu
// Debug program: F5 or Debug > Start Debugging menu
// Tips for Getting Started:
// 1. Use the Solution Explorer window to add/manage files
// 2. Use the Team Explorer window to connect to source control
// 3. Use the Output window to see build output and other messages
// 4. Use the Error List window to view errors
// 5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
// 6. In the future, to open this project again, go to File > Open > Project and select the .sln file