답안 #630131

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
630131 2022-08-15T17:51:48 Z alexdumitru Awesome Arrowland Adventure (eJOI19_adventure) C++14
50 / 100
4 ms 600 KB
#include <bits/stdc++.h>

using namespace std;

int n,m,i,j,d[505][505];
char a[505][505];

bool in(int x, int y)
{
    return (x>0&&y>0&&x<=n&&y<=m);
}

int cod(char c)
{
    if(c=='N')return 0;
    if(c=='E')return 1;
    if(c=='S')return 2;
    if(c=='W')return 3;
    return 4;
}

int cost(char a, int b)
{
    return (b-cod(a)+4)%4;
}

int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};

struct cmp{
    bool operator()(pair<int,int> a, pair<int,int> b)
    {
        return (d[a.first][a.second]>d[b.first][b.second]);
    }
};

priority_queue<pair<int,int>, vector<pair<int,int> >, cmp> pq;

bool vis[505][505];

void solve()
{
    cin>>n>>m;
    for(i=1;i<=n;i++)
    {
        cin>>(a[i]+1);
        for(j=1;j<=m;j++)
            d[i][j]=10000000;
    }
    if(a[1][1]=='X')
    {
        if(n==1&&m==1)
            cout<<0<<'\n';
        else cout<<-1<<'\n';
        return;
    }
    d[1][1]=0;
    pq.push(make_pair(1,1));
    while(!pq.empty())
    {
        int x=pq.top().first;
        int y=pq.top().second;
        pq.pop();
        if(a[x][y]=='X'||vis[x][y])
            continue;
        vis[x][y]=1;
        for(int i=0;i<4;i++)
        {
            int nx=x+dx[i];
            int ny=y+dy[i];
            if(!in(nx,ny))continue;
            int nc=d[x][y]+cost(a[x][y],i);
            if(nc<d[nx][ny])
            {
                d[nx][ny]=nc;
                if(a[nx][ny]!='X')
                    pq.push(make_pair(nx,ny));
            }
        }
    }
    cout<<(d[n][m]==10000000?-1:d[n][m])<<'\n';
}

signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    solve();
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 0 ms 340 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 0 ms 340 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Correct 0 ms 340 KB Output is correct
12 Correct 0 ms 340 KB Output is correct
13 Correct 1 ms 340 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
15 Correct 1 ms 344 KB Output is correct
16 Correct 1 ms 344 KB Output is correct
17 Correct 1 ms 340 KB Output is correct
18 Correct 1 ms 340 KB Output is correct
19 Correct 1 ms 340 KB Output is correct
20 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 0 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 1 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 0 ms 332 KB Output is correct
8 Correct 1 ms 212 KB Output is correct
9 Correct 0 ms 332 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 0 ms 340 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 340 KB Output is correct
7 Correct 0 ms 340 KB Output is correct
8 Correct 0 ms 340 KB Output is correct
9 Correct 0 ms 340 KB Output is correct
10 Correct 0 ms 340 KB Output is correct
11 Correct 0 ms 340 KB Output is correct
12 Correct 0 ms 340 KB Output is correct
13 Correct 1 ms 340 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
15 Correct 1 ms 344 KB Output is correct
16 Correct 1 ms 344 KB Output is correct
17 Correct 1 ms 340 KB Output is correct
18 Correct 1 ms 340 KB Output is correct
19 Correct 1 ms 340 KB Output is correct
20 Correct 1 ms 340 KB Output is correct
21 Correct 1 ms 340 KB Output is correct
22 Correct 0 ms 340 KB Output is correct
23 Correct 1 ms 340 KB Output is correct
24 Correct 1 ms 340 KB Output is correct
25 Correct 1 ms 340 KB Output is correct
26 Correct 0 ms 340 KB Output is correct
27 Correct 1 ms 340 KB Output is correct
28 Correct 1 ms 340 KB Output is correct
29 Correct 1 ms 340 KB Output is correct
30 Correct 1 ms 340 KB Output is correct
31 Correct 0 ms 332 KB Output is correct
32 Correct 1 ms 212 KB Output is correct
33 Correct 0 ms 332 KB Output is correct
34 Correct 0 ms 340 KB Output is correct
35 Correct 3 ms 468 KB Output is correct
36 Correct 0 ms 340 KB Output is correct
37 Incorrect 4 ms 600 KB Output isn't correct
38 Halted 0 ms 0 KB -