5744 2023. 09. 14 17:13:19 kukkerman Színes szobák (50 pont) cpp17 Elfogadva 50/50 188ms 36160 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;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 50/50
1 Elfogadva 0/0 3ms 1812 KiB
2 Elfogadva 0/0 123ms 25108 KiB
3 Elfogadva 1/1 4ms 2708 KiB
4 Elfogadva 1/1 4ms 2740 KiB
5 Elfogadva 1/1 4ms 2952 KiB
6 Elfogadva 1/1 4ms 3172 KiB
7 Elfogadva 1/1 4ms 3380 KiB
8 Elfogadva 1/1 4ms 3512 KiB
9 Elfogadva 1/1 3ms 3592 KiB
10 Elfogadva 1/1 4ms 3872 KiB
11 Elfogadva 1/1 4ms 3712 KiB
12 Elfogadva 1/1 4ms 4088 KiB
13 Elfogadva 1/1 12ms 5004 KiB
14 Elfogadva 1/1 8ms 5780 KiB
15 Elfogadva 1/1 10ms 6428 KiB
16 Elfogadva 1/1 14ms 7008 KiB
17 Elfogadva 1/1 17ms 6860 KiB
18 Elfogadva 1/1 17ms 6640 KiB
19 Elfogadva 1/1 87ms 14764 KiB
20 Elfogadva 1/1 123ms 15792 KiB
21 Elfogadva 1/1 101ms 15124 KiB
22 Elfogadva 1/1 105ms 15444 KiB
23 Elfogadva 1/1 119ms 15640 KiB
24 Elfogadva 1/1 123ms 16296 KiB
25 Elfogadva 1/1 123ms 16116 KiB
26 Elfogadva 1/1 123ms 16156 KiB
27 Elfogadva 3/3 184ms 36096 KiB
28 Elfogadva 3/3 188ms 36160 KiB
29 Elfogadva 3/3 166ms 36044 KiB
30 Elfogadva 3/3 177ms 36008 KiB
31 Elfogadva 3/3 181ms 36092 KiB
32 Elfogadva 3/3 159ms 36108 KiB
33 Elfogadva 4/4 71ms 20304 KiB
34 Elfogadva 4/4 108ms 21196 KiB