57442023-09-14 17:13:19kukkermanSzínes szobák (50 pont)cpp17Accepted 50/50188ms36160 KiB
#include <iostream>
#include <vector>
#include <unordered_map>

void beolvas(std::istream &in, std::vector<int> &szobak, int &szinek_szama, std::vector<std::pair<int, int>> &utasitasok) {
    int n, m;
    in >> n >> szinek_szama >> m;

    szobak.resize(n);
    for (auto i = 0; i < n; i++) {
        in >> szobak[i];
    }

    utasitasok.resize(m);
    for (auto i = 0; i < m; i++) {
        int szin, irany;
        in >> szin >> irany;

        utasitasok[i] = { szin, irany };
    }
}

void feldolgoz(const std::vector<int> &szobak, int szinek_szama, const std::vector<std::pair<int, int>> &utasitasok) {
    const auto n = szobak.size();

    std::vector<std::unordered_map<int, int>> poz(szinek_szama + 1);
    for (auto i = 0; i < n; i++) {
        poz[szobak[i]].emplace(i, 1);
    }

    int tavozo_db = 0;
    for (auto [akt_szin, irany] : utasitasok) {
        std::unordered_map<int, int> uj_akt_szin_poz;
        for (auto [regi_poz, db] : poz[akt_szin]) {
            const auto uj_poz = regi_poz + irany;

            if (uj_poz == -1 || uj_poz == n) {
                tavozo_db += db;

            } else {
                const auto regi_szin = szobak[regi_poz];
                const auto uj_szin = szobak[uj_poz];

                if (regi_szin != uj_szin) {
                    poz[uj_szin][uj_poz] += db;

                } else {
                    uj_akt_szin_poz.emplace(uj_poz, db);
                }
            }
        }
        poz[akt_szin] = std::move(uj_akt_szin_poz);
    }

    std::cout << tavozo_db << std::endl;
}

int main() {
    std::vector<int> szobak;
    int szinek_szama;
    std::vector<std::pair<int, int>> utasitasok;

    beolvas(std::cin, szobak, szinek_szama, utasitasok);
    feldolgoz(szobak, szinek_szama, utasitasok);

    return 0;
}
SubtaskSumTestVerdictTimeMemory
base50/50
1Accepted0/03ms1812 KiB
2Accepted0/0123ms25108 KiB
3Accepted1/14ms2708 KiB
4Accepted1/14ms2740 KiB
5Accepted1/14ms2952 KiB
6Accepted1/14ms3172 KiB
7Accepted1/14ms3380 KiB
8Accepted1/14ms3512 KiB
9Accepted1/13ms3592 KiB
10Accepted1/14ms3872 KiB
11Accepted1/14ms3712 KiB
12Accepted1/14ms4088 KiB
13Accepted1/112ms5004 KiB
14Accepted1/18ms5780 KiB
15Accepted1/110ms6428 KiB
16Accepted1/114ms7008 KiB
17Accepted1/117ms6860 KiB
18Accepted1/117ms6640 KiB
19Accepted1/187ms14764 KiB
20Accepted1/1123ms15792 KiB
21Accepted1/1101ms15124 KiB
22Accepted1/1105ms15444 KiB
23Accepted1/1119ms15640 KiB
24Accepted1/1123ms16296 KiB
25Accepted1/1123ms16116 KiB
26Accepted1/1123ms16156 KiB
27Accepted3/3184ms36096 KiB
28Accepted3/3188ms36160 KiB
29Accepted3/3166ms36044 KiB
30Accepted3/3177ms36008 KiB
31Accepted3/3181ms36092 KiB
32Accepted3/3159ms36108 KiB
33Accepted4/471ms20304 KiB
34Accepted4/4108ms21196 KiB