CSES - Datatähti 2025 loppu - Results
Submission details
Task:Suunnistus
Sender:maweiyin24562
Submission time:2025-01-18 14:29:46 +0200
Language:C++ (C++11)
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED31
#2ACCEPTED12
#3ACCEPTED57
Test results
testverdicttimegroup
#1ACCEPTED0.01 s3details
#2ACCEPTED0.02 s1, 2, 3details
#3ACCEPTED0.02 s1, 2, 3details
#4ACCEPTED0.02 s1, 2, 3details
#5ACCEPTED0.00 s1, 2, 3details
#6ACCEPTED0.00 s1, 2, 3details
#7ACCEPTED0.15 s2, 3details
#8ACCEPTED0.15 s2, 3details
#9ACCEPTED0.02 s2, 3details
#10ACCEPTED0.80 s3details
#11ACCEPTED0.80 s3details
#12ACCEPTED0.02 s3details
#13ACCEPTED0.55 s3details
#14ACCEPTED0.06 s2, 3details
#15ACCEPTED0.01 s3details
#16ACCEPTED0.01 s3details
#17ACCEPTED0.04 s2, 3details

Code

#include <bits/stdc++.h>

#define ll long long
#define lbit(u) (u&(-u))

const int N=100009;

using namespace std;

char mp[509][509];
int d[509][509];
int n,m,sx,sy;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};

struct Node{
    int x,y,d;
};

int k;

bool islegal(int x,int y){
    return mp[x][y]!='#'&&x>=1&&x<=n&&y>=1&&y<=m;
}
queue<Node>q;
queue<Node>q_new;
queue<Node>q_empty;
void bfsnopatrol(){
    q.push({sx,sy,0});
    d[sx][sy]=1;
    while(!q.empty()){
        Node now=q.front();
        q.pop();
        if(mp[now.x][now.y]=='E'){
            cout<<now.d<<endl;
            return;
        }
        for(int i=0;i<4;i++){
            int nx=now.x+dx[i];
            int ny=now.y+dy[i];
            if(islegal(nx,ny)&&d[nx][ny]!=1){
                q.push({nx,ny,now.d+1});
                d[nx][ny]=1;
            }
        }
    }
    cout<<-1<<endl;
}

void bfs(){
    q_new.push({sx,sy,0});
    for(int i=1;i<=k;i++){
        q=q_new;
        q_new=q_empty;
        memset(d,0x7f7f7f,sizeof(d));
        while(!q.empty()){
            Node now=q.front();
            q.pop();
            if(d[now.x][now.y]<=now.d)continue;
            d[now.x][now.y]=now.d;
            if(mp[now.x][now.y]==i+'0'){
                q_new.push(now);
            }
            for(int i=0;i<4;i++){
                int nx=now.x+dx[i];
                int ny=now.y+dy[i];
                if(islegal(nx,ny)){
                    q.push({nx,ny,now.d+1});
                }
            }
        }
    }
    q=q_new;
    q_new=q_empty;
    int ans=0x7f7f7f;
    memset(d,0x7f7f7f,sizeof(d));
    while(!q.empty()){
        Node now=q.front();
        q.pop();
        if(d[now.x][now.y]<=now.d)continue;
        d[now.x][now.y]=now.d;
        if(mp[now.x][now.y]=='E'){
            ans=min(ans,now.d);
            continue;
        }
        for(int i=0;i<4;i++){
            int nx=now.x+dx[i];
            int ny=now.y+dy[i];
            if(islegal(nx,ny)){
                q.push({nx,ny,now.d+1});
            }
        }
    }
    if(ans==0x7f7f7f)cout<<-1<<endl;
    else cout<<ans<<endl;
}

int main(){
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++){
            cin>>mp[i][j];
            if(mp[i][j]=='S'){sx=i;sy=j;}
        }
    if(k==0)bfsnopatrol();
    else bfs();
    return 0;
}

/*

*/

Test details

Test 1

Group: 3

Verdict: ACCEPTED

input
10 10 9
S293#35616
#662963731
54975451#7
5162589168
...

correct output
25

user output
25

Test 2

Group: 1, 2, 3

Verdict: ACCEPTED

input
500 500 0
.................................

correct output
301

user output
301

Test 3

Group: 1, 2, 3

Verdict: ACCEPTED

input
500 500 0
.#.........#.#..##..#............

correct output
253

user output
253

Test 4

Group: 1, 2, 3

Verdict: ACCEPTED

input
500 500 0
...#......##.##.#.#..##..#..##...

correct output
-1

user output
-1

Test 5

Group: 1, 2, 3

Verdict: ACCEPTED

input
500 1 0
.
.
.
.
...

correct output
77

user output
77

Test 6

Group: 1, 2, 3

Verdict: ACCEPTED

input
1 500 0
.................................

correct output
166

user output
166

Test 7

Group: 2, 3

Verdict: ACCEPTED

input
500 500 9
.................................

correct output
3447

user output
3447

Test 8

Group: 2, 3

Verdict: ACCEPTED

input
500 500 9
.#........#..................#...

correct output
4952

user output
4952

Test 9

Group: 2, 3

Verdict: ACCEPTED

input
500 500 9
##.########.##########.#..#......

correct output
-1

user output
-1

Test 10

Group: 3

Verdict: ACCEPTED

input
500 500 9
623475428948841896621266296765...

correct output
205

user output
205

Test 11

Group: 3

Verdict: ACCEPTED

input
500 500 9
7##814125813#3463#272134469457...

correct output
157

user output
157

Test 12

Group: 3

Verdict: ACCEPTED

input
500 500 9
##67##36##5#3###67###8972#61##...

correct output
-1

user output
-1

Test 13

Group: 3

Verdict: ACCEPTED

input
500 500 9
....................#...#........

correct output
1313

user output
1313

Test 14

Group: 2, 3

Verdict: ACCEPTED

input
499 499 9
S#...#...#...#...#...#...#...#...

correct output
1124942

user output
1124942

Test 15

Group: 3

Verdict: ACCEPTED

input
500 1 9
1
6
1
3
...

correct output
332

user output
332

Test 16

Group: 3

Verdict: ACCEPTED

input
1 500 9
996327784392827829434482995353...

correct output
135

user output
135

Test 17

Group: 2, 3

Verdict: ACCEPTED

input
500 500 9
.................................

correct output
-1

user output
-1