Cod sursa(job #2736867)

Utilizator mex7Alexandru Valentin mex7 Data 4 aprilie 2021 08:46:32
Problema Matrice 2 Scor 35
Compilator cpp-64 Status done
Runda oni_wellcode_day_4 Marime 1.61 kb
#include <bits/stdc++.h>
#define ll long long
#define cin fin
#define cout fout
#define NEXTROW (i + dirI[k])
#define NEXTCOL (j + dirJ[k])
using namespace std;

ifstream fin("matrice2.in");
ofstream fout("matrice2.out");
int n, q, mat[305][305];
int dirI[] = {1, 0, -1, 0};
int dirJ[] = {0, 1, 0, -1};
bitset <305> reached[305];

int findAns(int startX, int startY, int endX, int endY) {
    priority_queue <pair <int, pair <int, int> > > best;
    best.push(make_pair(mat[startX][startY], make_pair(startX, startY)));
    while (!best.empty()) {
        int cost = best.top().first;
        int i = best.top().second.first;
        int j = best.top().second.second;
        best.pop();

        if (i == endX && j == endY)
            return cost;

        if (!reached[i][j]) {
            reached[i][j] = 1;
            for (int k = 0; k < 4; k++)
                if (NEXTROW >= 1 && NEXTROW <= n && NEXTCOL >= 1 && NEXTCOL <= n)
                    if (!reached[NEXTROW][NEXTCOL])
                        best.push(make_pair(min(cost, mat[NEXTROW][NEXTCOL]), make_pair(NEXTROW, NEXTCOL)));
        }
    }
}

int main() {
    ios :: sync_with_stdio(0);
    cin.tie(0);

    cin >> n >> q;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
            cin >> mat[i][j];

    for (int query = 1; query <= q; query++) {
        int startX, startY, endX, endY;

        cin >> startX >> startY >> endX >> endY;
        cout << findAns(startX, startY, endX, endY) << '\n';

        for (int i = 1; i <= n; i++)
            reached[i].reset();
    }

    return 0;
}