169742025-05-19 18:21:40algoproLabirintuscpp17Időlimit túllépés 15/1002.101s12248 KiB
// UUID: 82af34be-eded-443c-ade4-f147cc57efc0
#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
1Elfogadva1ms316 KiB
2Időlimit túllépés2.085s12080 KiB
subtask215/15
3Elfogadva118ms820 KiB
4Elfogadva65ms820 KiB
5Elfogadva134ms568 KiB
6Elfogadva141ms316 KiB
7Elfogadva118ms820 KiB
8Elfogadva118ms820 KiB
subtask30/18
9Időlimit túllépés2.086s820 KiB
10Időlimit túllépés2.088s748 KiB
11Időlimit túllépés2.088s12084 KiB
12Időlimit túllépés2.088s12084 KiB
13Időlimit túllépés2.085s12020 KiB
14Időlimit túllépés2.085s12084 KiB
subtask40/28
15Időlimit túllépés2.089s12084 KiB
16Időlimit túllépés2.089s12088 KiB
17Időlimit túllépés2.089s12020 KiB
18Időlimit túllépés2.089s12020 KiB
19Időlimit túllépés2.078s12024 KiB
20Elfogadva201ms12080 KiB
21Elfogadva1.251s12016 KiB
22Időlimit túllépés2.078s12020 KiB
23Időlimit túllépés2.082s12088 KiB
subtask50/39
24Elfogadva48ms316 KiB
25Elfogadva24ms316 KiB
26Elfogadva135ms564 KiB
27Elfogadva141ms440 KiB
28Elfogadva134ms316 KiB
29Elfogadva140ms316 KiB
30Időlimit túllépés2.082s11996 KiB
31Időlimit túllépés2.099s12000 KiB
32Időlimit túllépés2.084s12084 KiB
33Időlimit túllépés2.101s12084 KiB
34Időlimit túllépés2.088s12084 KiB
35Időlimit túllépés2.101s12084 KiB
36Elfogadva1.35s12248 KiB
37Időlimit túllépés2.101s12008 KiB
38Elfogadva317ms12080 KiB
39Időlimit túllépés2.081s12084 KiB