1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
using namespace std;

int main() {
    long long x, d, h, m;
    if (!(cin >> x >> d >> h >> m)) return 0;

    // 1. Obliczamy dzień zakończenia rundy
    int dzien_konca = (x == 5) ? 29 : (x + 23);

    // 2. Liczymy ile minut upłynęło od początku marca do momentu STARTU
    // Doba ma 1440 minut
    long long start_minuty = d * 1440 + h * 60 + m;

    // 3. Liczymy ile minut upłynęło od początku marca do momentu KONCA
    // Koniec jest zawsze o 23:59:59, czyli traktujemy to jako pełną dobę (24:00)
    long long koniec_minuty = dzien_konca * 1440 + 24 * 60;

    // 4. Obliczamy różnicę
    long long wynik = koniec_minuty - start_minuty;

    // 5. Korekta o zmianę czasu (skrócenie rundy o 60 min)
    // Zmiana czasu następuje między 28 marca a końcem 29 marca.
    // Jeśli runda trwa przez noc z 28 na 29 marca, odejmij 60 minut.

    // Warunek: runda kończy się 29 marca (czyli x=5 lub runda 4 zaczęta 27.03), 
    // a start był PRZED godziną 2:00 w nocy 29 marca.
    bool runda_obejmuje_zmiane = (dzien_konca == 29);
    bool start_przed_zmiana = (d < 29 || (d == 29 && h < 2));

    if (runda_obejmuje_zmiane && start_przed_zmiana) {
        wynik -= 60;
    }

    cout << wynik;

    return 0;
}