169742025-05-19 18:21:40algoproLabirintuscpp17Time limit exceeded 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;
}*/
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted1ms316 KiB
2Time limit exceeded2.085s12080 KiB
subtask215/15
3Accepted118ms820 KiB
4Accepted65ms820 KiB
5Accepted134ms568 KiB
6Accepted141ms316 KiB
7Accepted118ms820 KiB
8Accepted118ms820 KiB
subtask30/18
9Time limit exceeded2.086s820 KiB
10Time limit exceeded2.088s748 KiB
11Time limit exceeded2.088s12084 KiB
12Time limit exceeded2.088s12084 KiB
13Time limit exceeded2.085s12020 KiB
14Time limit exceeded2.085s12084 KiB
subtask40/28
15Time limit exceeded2.089s12084 KiB
16Time limit exceeded2.089s12088 KiB
17Time limit exceeded2.089s12020 KiB
18Time limit exceeded2.089s12020 KiB
19Time limit exceeded2.078s12024 KiB
20Accepted201ms12080 KiB
21Accepted1.251s12016 KiB
22Time limit exceeded2.078s12020 KiB
23Time limit exceeded2.082s12088 KiB
subtask50/39
24Accepted48ms316 KiB
25Accepted24ms316 KiB
26Accepted135ms564 KiB
27Accepted141ms440 KiB
28Accepted134ms316 KiB
29Accepted140ms316 KiB
30Time limit exceeded2.082s11996 KiB
31Time limit exceeded2.099s12000 KiB
32Time limit exceeded2.084s12084 KiB
33Time limit exceeded2.101s12084 KiB
34Time limit exceeded2.088s12084 KiB
35Time limit exceeded2.101s12084 KiB
36Accepted1.35s12248 KiB
37Time limit exceeded2.101s12008 KiB
38Accepted317ms12080 KiB
39Time limit exceeded2.081s12084 KiB