57442023-09-14 17:13:19kukkermanSzínes szobák (50 pont)cpp17Elfogadva 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/03ms1812 KiB
2Elfogadva0/0123ms25108 KiB
3Elfogadva1/14ms2708 KiB
4Elfogadva1/14ms2740 KiB
5Elfogadva1/14ms2952 KiB
6Elfogadva1/14ms3172 KiB
7Elfogadva1/14ms3380 KiB
8Elfogadva1/14ms3512 KiB
9Elfogadva1/13ms3592 KiB
10Elfogadva1/14ms3872 KiB
11Elfogadva1/14ms3712 KiB
12Elfogadva1/14ms4088 KiB
13Elfogadva1/112ms5004 KiB
14Elfogadva1/18ms5780 KiB
15Elfogadva1/110ms6428 KiB
16Elfogadva1/114ms7008 KiB
17Elfogadva1/117ms6860 KiB
18Elfogadva1/117ms6640 KiB
19Elfogadva1/187ms14764 KiB
20Elfogadva1/1123ms15792 KiB
21Elfogadva1/1101ms15124 KiB
22Elfogadva1/1105ms15444 KiB
23Elfogadva1/1119ms15640 KiB
24Elfogadva1/1123ms16296 KiB
25Elfogadva1/1123ms16116 KiB
26Elfogadva1/1123ms16156 KiB
27Elfogadva3/3184ms36096 KiB
28Elfogadva3/3188ms36160 KiB
29Elfogadva3/3166ms36044 KiB
30Elfogadva3/3177ms36008 KiB
31Elfogadva3/3181ms36092 KiB
32Elfogadva3/3159ms36108 KiB
33Elfogadva4/471ms20304 KiB
34Elfogadva4/4108ms21196 KiB