27972023-01-25 12:23:30Error42Videójátékcpp11Elfogadva 100/100188ms8660 KiB
// Code of Martin Nagy (CWM), only debugged by me

#include <iostream>
#include <vector>
using namespace std;
//#define int long long
int T;

// last minute in which the character wasn't bored
//
// special value: if equal to Me.end, means that we got bored and stopped playing
int lastPlayedGlobal;
struct interval {
    int beginning;
    int end;
};
char intersectionType(interval Me, interval Hano) {
    // intersecting and Me.beginning <= Hano.beginning
    if (Me.beginning <= Hano.beginning && Me.end >= Hano.beginning) return 'M';
    // intersecting and Me.beginning > Hano.begin
    if (Me.beginning >= Hano.beginning && Hano.end >= Me.beginning) return 'H';
    // no intersection
    return 'N'; 
}
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 + 1 >= Hano.beginning 
            && /* handle special value: */ lastPlayedGlobal != Me.end
        ) {
            return min(Hano.end, Me.end) - Hano.beginning + 1;
        }
        else {
            lastPlayedGlobal = Me.end;
            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 - 1;
    int MaxPlayTime = 0;
    while (true) {
        MaxPlayTime += calcPlayTime(meIntervals[meIntervalIndex], hanoIntervals[hanoIntervalIndex]);
        if (meIntervals[meIntervalIndex].end >= hanoIntervals[hanoIntervalIndex].end) {
            // Hano's planned break ended strictly earlier

            // special value handled: always Hano.end < Me.end
            if (lastPlayedGlobal < 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;
            }
            lastPlayedGlobal = meIntervals[meIntervalIndex].beginning - 1;
        }
    }
}

// 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
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1812 KiB
2Elfogadva2ms2060 KiB
subtask210/10
3Elfogadva2ms2208 KiB
4Elfogadva2ms2604 KiB
5Elfogadva2ms2736 KiB
6Elfogadva2ms2796 KiB
7Elfogadva2ms2920 KiB
8Elfogadva2ms2964 KiB
9Elfogadva2ms2844 KiB
10Elfogadva2ms2996 KiB
11Elfogadva2ms3188 KiB
subtask320/20
12Elfogadva2ms3160 KiB
13Elfogadva2ms3156 KiB
14Elfogadva2ms3284 KiB
15Elfogadva2ms3164 KiB
16Elfogadva2ms3164 KiB
17Elfogadva3ms3436 KiB
18Elfogadva3ms3300 KiB
19Elfogadva4ms3404 KiB
20Elfogadva3ms3300 KiB
21Elfogadva3ms3532 KiB
22Elfogadva2ms3600 KiB
subtask430/30
23Elfogadva14ms4028 KiB
24Elfogadva50ms5008 KiB
25Elfogadva123ms8100 KiB
26Elfogadva136ms8200 KiB
27Elfogadva137ms8152 KiB
28Elfogadva54ms5624 KiB
29Elfogadva10ms3972 KiB
30Elfogadva10ms4340 KiB
31Elfogadva6ms4192 KiB
subtask540/40
32Elfogadva16ms4484 KiB
33Elfogadva61ms5580 KiB
34Elfogadva115ms6988 KiB
35Elfogadva164ms8552 KiB
36Elfogadva188ms8660 KiB
37Elfogadva185ms8476 KiB
38Elfogadva94ms6532 KiB
39Elfogadva114ms8156 KiB
40Elfogadva28ms5320 KiB
41Elfogadva43ms5520 KiB