169672025-05-19 17:50:48horkaLabirintuscpp17Időlimit túllépés 15/1002.101s16948 KiB
#include "labirintus.h"
using namespace std;
#include <cassert>
#include <cstdio>
#include <array>
#include <vector>
#include <queue>
vector<vector<int>> d;
int n,m;
void init_labyrinth(int r, int c, std::vector<std::vector<int>> L) {
    //cout<<"itt"<<endl;
    n=r,m=c;
    d.assign(n+2, vector<int> (m+2, 1));
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            d[i][j]=L[i-1][j-1];
    return;
}
vector<array<int, 2>> dir{{0,1},{1,0},{-1,0},{0,-1}};
bool can_escape(int N, std::vector<int> u, std::vector<int> v) {
    //cout<<"itt2"<<endl;
    for(int i=0; i<N; i++)
    {
        d[u[i]+1][v[i]+1]=1;
    }
    vector<vector<bool>> s(n+2, vector<bool> (m+2, 1));
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
    {
        s[i][j]=(d[i][j]>0?1:0);
        int mx=0;
        for(auto &[a,b]:dir)
            mx=max(mx,d[a+i][b+j]);
        if(mx==2) s[i][j]=1;
    }
    vector<vector<bool>> vis(n+2, vector<bool> (m+2));
    queue<array<int, 2>> q;
    if(!s[1][1])
    {
        q.push({1,1});
        vis[1][1]=1;
    }
    while(!q.empty())
    {
        auto [x,y]=q.front();
        q.pop();
        for(auto &[a,b]:dir)
            if(!s[a+x][b+y] && !vis[a+x][b+y])
        {
            vis[a+x][b+y]=1;
            q.push({a+x,b+y});
        }
    }
    for(int i=0; i<N; i++)
        d[u[i]+1][v[i]+1]=0;

    return vis[n][m];
}

/*int main() {
    int R, C, Q;
    assert(3 == scanf("%d %d %d", &R, &C, &Q));

    std::vector<std::vector<int>> labyrinth(R, std::vector<int>(C));
    for (int i = 0; i < R; ++i) {
        for (int j = 0; j < C; ++j) {
            char c;
            assert(1 == scanf(" %c", &c));
            labyrinth[i][j] = c - '0';
        }
    }
    init_labyrinth(R, C, labyrinth);

    std::vector<int> answers(Q);
    for (int i = 0; i < Q; ++i) {
        int N;
        assert(1 == scanf("%d", &N));
        std::vector<int> U(N), V(N);
        for (int j = 0; j < N; ++j) {
            assert(2 == scanf("%d %d", &U[j], &V[j]));
        }
        answers[i] = can_escape(N, U, V);
    }

    for (int i = 0; i < Q; ++i) {
        printf("%d\n", answers[i]);
    }

    return 0;
}*/
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva1ms500 KiB
2Időlimit túllépés2.078s13108 KiB
subtask215/15
3Elfogadva119ms1076 KiB
4Elfogadva65ms920 KiB
5Elfogadva136ms3368 KiB
6Elfogadva143ms3124 KiB
7Elfogadva119ms2660 KiB
8Elfogadva119ms2612 KiB
subtask30/18
9Időlimit túllépés2.088s1332 KiB
10Időlimit túllépés2.088s2440 KiB
11Időlimit túllépés2.088s13148 KiB
12Időlimit túllépés2.089s13364 KiB
13Időlimit túllépés2.081s13360 KiB
14Időlimit túllépés2.082s13108 KiB
subtask40/28
15Időlimit túllépés2.088s14388 KiB
16Időlimit túllépés2.088s14388 KiB
17Időlimit túllépés2.089s14652 KiB
18Időlimit túllépés2.091s13664 KiB
19Időlimit túllépés2.084s14048 KiB
20Elfogadva202ms13116 KiB
21Elfogadva1.256s13108 KiB
22Időlimit túllépés2.085s14124 KiB
23Időlimit túllépés2.081s14132 KiB
subtask50/39
24Elfogadva50ms820 KiB
25Elfogadva24ms564 KiB
26Elfogadva136ms3368 KiB
27Elfogadva143ms3124 KiB
28Elfogadva136ms3124 KiB
29Elfogadva142ms3124 KiB
30Időlimit túllépés2.086s13108 KiB
31Időlimit túllépés2.101s13364 KiB
32Időlimit túllépés2.085s14300 KiB
33Időlimit túllépés2.101s13364 KiB
34Időlimit túllépés2.075s13204 KiB
35Időlimit túllépés2.099s13364 KiB
36Elfogadva1.353s16948 KiB
37Időlimit túllépés2.099s14388 KiB
38Elfogadva321ms16692 KiB
39Időlimit túllépés2.082s13860 KiB