169672025-05-19 17:50:48horkaLabirintuscpp17Time limit exceeded 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;
}*/
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted1ms500 KiB
2Time limit exceeded2.078s13108 KiB
subtask215/15
3Accepted119ms1076 KiB
4Accepted65ms920 KiB
5Accepted136ms3368 KiB
6Accepted143ms3124 KiB
7Accepted119ms2660 KiB
8Accepted119ms2612 KiB
subtask30/18
9Time limit exceeded2.088s1332 KiB
10Time limit exceeded2.088s2440 KiB
11Time limit exceeded2.088s13148 KiB
12Time limit exceeded2.089s13364 KiB
13Time limit exceeded2.081s13360 KiB
14Time limit exceeded2.082s13108 KiB
subtask40/28
15Time limit exceeded2.088s14388 KiB
16Time limit exceeded2.088s14388 KiB
17Time limit exceeded2.089s14652 KiB
18Time limit exceeded2.091s13664 KiB
19Time limit exceeded2.084s14048 KiB
20Accepted202ms13116 KiB
21Accepted1.256s13108 KiB
22Time limit exceeded2.085s14124 KiB
23Time limit exceeded2.081s14132 KiB
subtask50/39
24Accepted50ms820 KiB
25Accepted24ms564 KiB
26Accepted136ms3368 KiB
27Accepted143ms3124 KiB
28Accepted136ms3124 KiB
29Accepted142ms3124 KiB
30Time limit exceeded2.086s13108 KiB
31Time limit exceeded2.101s13364 KiB
32Time limit exceeded2.085s14300 KiB
33Time limit exceeded2.101s13364 KiB
34Time limit exceeded2.075s13204 KiB
35Time limit exceeded2.099s13364 KiB
36Accepted1.353s16948 KiB
37Time limit exceeded2.099s14388 KiB
38Accepted321ms16692 KiB
39Time limit exceeded2.082s13860 KiB