2232 2023. 01. 03 22:44:56 TuruTamas Jegesmedve (50) cpp11 Futási hiba 19/50 400ms 62936 KiB
#include <bits/stdc++.h>
using namespace std;

void elerheto(vector<vector<int>> tabla, pair<int , int> kezd, int nap, int N, int M, int** olvad, bool** volt) {
    volt[kezd.first][kezd.second] = true;
    if (olvad[kezd.first][kezd.second] < nap) {
        olvad[kezd.first][kezd.second] = nap;
    }
    if (kezd.first != 0 && tabla[kezd.first - 1][kezd.second] >= nap && !volt[kezd.first - 1][kezd.second]) {
        elerheto(tabla, pair<int,int>(kezd.first - 1, kezd.second), nap, N, M, olvad, volt);
    } // fel
    if (kezd.first != N - 1 && tabla[kezd.first + 1][kezd.second] >= nap && !volt[kezd.first + 1][kezd.second]) {
        elerheto(tabla, pair<int,int>(kezd.first + 1, kezd.second), nap, N, M, olvad, volt);
    } // le
    if (kezd.second != 0 && tabla[kezd.first][kezd.second - 1] >= nap && !volt[kezd.first][kezd.second - 1]) {
        elerheto(tabla, pair<int,int>(kezd.first, kezd.second - 1), nap, N, M, olvad, volt);
    } // balra
    if (kezd.second != M - 1 && tabla[kezd.first][kezd.second + 1] >= nap && !volt[kezd.first][kezd.second + 1]) {
        elerheto(tabla, pair<int,int>(kezd.first, kezd.second + 1), nap, N, M, olvad, volt);
    } // jobbra
}

int main() {
    int N, M; cin >> N >> M;
    vector<vector<int>> tabla;
    vector<vector<int>> halak;
    pair<int, int> medve;
    set<int> napok;
    for (int i = 0; i < N; i++)
    {
        vector<int> tmp;
        for (int k = 0; k < M; k++)
        {
            int x; cin >> x;
            if (x == -1) {
                medve.first = i;
                medve.second = k;
            }
            napok.insert(x);
            tmp.push_back(x);
        }
        tabla.push_back(tmp);
    }
    for (int i = 0; i < N; i++)
    {
        vector<int> tmp;
        for (int k = 0; k < M; k++)
        {
            int x; cin >> x;
            tmp.push_back(x);
        }
        halak.push_back(tmp);
    }


    int ** olvad = new int*[N];
    for (int i = 0; i < N; i++)
    {
        olvad[i] = new int[M];
        fill(olvad[i], olvad[i] + M, -1);
    }


    for (auto it = napok.begin(); it != napok.end(); it++)
    {
        if ((*it) == -1) {
            continue;
        }
        bool ** volt = new bool*[N];
        for (int i = 0; i < N; i++)
        {
            volt[i] = new bool[M];
            fill(volt[i], volt[i] + M, false);
        }
        elerheto(tabla, medve, (*it), N, M, olvad, volt);
    }    

    vector<int> napok_halak;
    napok_halak.resize(*(--napok.end()) + 1);
    fill_n(napok_halak.begin(), napok_halak.size(), 0);
    for (int i = 0; i < N; i++)
    {
        for (int k = 0; k < M; k++)
        {
            napok_halak[olvad[i][k]] += halak[i][k];
        }
    }

    int nap = 0;
    for (int i = 0; i < napok_halak.size(); i++)
    {
        nap = min(napok_halak[i] + nap, i);
    }    
    cout << nap + 1;
    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 19/50
1 Elfogadva 0/0 3ms 1816 KiB
2 Elfogadva 0/0 7ms 2828 KiB
3 Elfogadva 3/3 16ms 19276 KiB
4 Elfogadva 3/3 28ms 46428 KiB
5 Futási hiba 0/3 34ms 62680 KiB
6 Futási hiba 0/4 29ms 62868 KiB
7 Elfogadva 3/3 3ms 3668 KiB
8 Elfogadva 3/3 3ms 3964 KiB
9 Elfogadva 3/3 3ms 3900 KiB
10 Elfogadva 4/4 3ms 4156 KiB
11 Időlimit túllépés 0/4 400ms 18104 KiB
12 Időlimit túllépés 0/4 381ms 11332 KiB
13 Időlimit túllépés 0/4 370ms 9932 KiB
14 Futási hiba 0/4 39ms 62936 KiB
15 Futási hiba 0/4 35ms 62908 KiB
16 Futási hiba 0/4 34ms 62684 KiB