54372023-06-01 14:33:53TimiFantasztikus Kaland Nyílországbancpp14Wrong answer 0/10041ms68228 KiB
#include <iostream>

using namespace std;
const int N=500;
const int M=500;
bool Matrixban(int x, int y, int n, int m)
{
    return (x>=0 && x<n && y>=0 && y<m);
}

int szamol(int x, int y, int n, int m, char a[N][M], bool meglatogatott[N][M])
{
    meglatogatott[x][y]=true;
    if (x==n-1 && y==m-1)
        return 0;
    int md, minimum=100000000;
    bool ok=false;
    if (a[x][y]=='E')
    {
        if (Matrixban(x, y-1, n, m) && a[x][y-1]!='X' && !meglatogatott[x][y-1] )
        {
             md=szamol(x, y-1, n, m, a, meglatogatott);
             if (md!=-1 && md+2<minimum)
             {
                minimum=md+2;
                ok=true;
             }
        }


        if (Matrixban(x+1, y, n, m) && a[x+1][y]!='X' && !meglatogatott[x+1][y] )
        {
             md=szamol(x+1, y, n, m, a, meglatogatott);
        if (md!=-1 && md+1<minimum)
        {
                minimum=md+1;
                ok=true;
        }
        }

        if (Matrixban(x, y+1, n, m) && a[x][y+1]!='X' && !meglatogatott[x][y+1] )
        {
             md=szamol(x, y+1, n, m, a, meglatogatott);
        if (md!=-1 && md<minimum)
        {
                minimum=md;
                ok=true;
        }
        }

        if (Matrixban(x-1, y, n, m) && a[x-1][y]!='X' && !meglatogatott[x-1][y] )
        {
             md=szamol(x-1, y, n, m, a, meglatogatott);
        if (md!=-1 && md+3<minimum)
        {
                minimum=md+3;
                ok=true;
        }
        }

        if (ok)
            return minimum;
        else
            return -1;
    }

    if (a[x][y]=='N')
    {
        if (Matrixban(x, y-1, n, m) && a[x][y-1]!='X' && !meglatogatott[x][y-1] )
        {
             md=szamol(x, y-1, n, m, a, meglatogatott);
        if (md!=-1 && md+3<minimum)
        {
                minimum=md+3;
                ok=true;
        }
        }

        if (Matrixban(x+1, y, n, m) && a[x+1][y]!='X' && !meglatogatott[x+1][y] )
        {
             md=szamol(x+1, y, n, m, a, meglatogatott);
        if (md!=-1 && md+2<minimum)
        {
                minimum=md+2;
                ok=true;
        }
        }

        if (Matrixban(x, y+1, n, m) && a[x][y+1]!='X' && !meglatogatott[x][y+1] )
        {
            md=szamol(x, y+1, n, m, a, meglatogatott);
        if (md!=-1 && md+1<minimum)
        {
                minimum=md+1;
                ok=true;
        }
        }

        if (Matrixban(x-1, y, n, m) && a[x-1][y]!='X' && !meglatogatott[x-1][y] )
        {
             md=szamol(x-1, y, n, m, a, meglatogatott);
        if (md!=-1 && md<minimum)
        {
                minimum=md;
                ok=true;
        }
        }

        if (ok)
            return minimum;
        else
            return -1;
    }

    if (a[x][y]=='W')
    {
        if (Matrixban(x, y-1, n, m) && a[x][y-1]!='X' && !meglatogatott[x][y-1] )
        {
             md=szamol(x, y-1, n, m, a, meglatogatott);
        if (md!=-1 && md<minimum)
        {
                minimum=md;
                ok=true;
        }
        }

        if (Matrixban(x+1, y, n, m) && a[x+1][y]!='X' && !meglatogatott[x+1][y] )
        {
             md=szamol(x+1, y, n, m, a, meglatogatott);
        if (md!=-1 && md+3<minimum)
        {
                minimum=md+3;
                ok=true;
        }
        }

        if (Matrixban(x, y+1, n, m) && a[x][y+1]!='X' && !meglatogatott[x][y+1] )
        {
             md=szamol(x, y+1, n, m, a, meglatogatott);
        if (md!=-1 && md+2<minimum)
        {
                minimum=md+2;
                ok=true;
        }
        }

        if (Matrixban(x-1, y, n, m) && a[x-1][y]!='X' && !meglatogatott[x-1][y] )
        {
             md=szamol(x-1, y, n, m, a, meglatogatott);
        if (md!=-1 && md+1<minimum)
        {
                minimum=md+1;
                ok=true;
        }
        }

        if (ok)
            return minimum;
        else
            return -1;
    }

    if (a[x][y]=='S')
    {
        if (Matrixban(x, y-1, n, m) && a[x][y-1]!='X' && !meglatogatott[x][y-1] )
        {
             md=szamol(x, y-1, n, m, a, meglatogatott);
        if (md!=-1 && md+1<minimum)
        {
                minimum=md+1;
                ok=true;
        }
        }

        if (Matrixban(x+1, y, n, m) && a[x+1][y]!='X' && !meglatogatott[x+1][y] )
        {
             md=szamol(x+1, y, n, m, a, meglatogatott);
        if (md!=-1 && md<minimum)
        {
                minimum=md;
                ok=true;
        }
        }

        if (Matrixban(x, y+1, n, m) && a[x][y+1]!='X' && !meglatogatott[x][y+1] )
        {
             md=szamol(x, y+1, n, m, a, meglatogatott);
        if (md!=-1 && md+3<minimum)
        {
                minimum=md+3;
                ok=true;
        }
        }

        if (Matrixban(x-1, y, n, m) && a[x-1][y]!='X' && !meglatogatott[x-1][y] )
        {
             md=szamol(x-1, y, n, m, a, meglatogatott);
        if (md!=-1 && md+2<minimum)
        {
                minimum=md+2;
                ok=true;
        }
        }

        if (ok)
            return minimum;
        else
            return -1;
    }
}
int main()
{
    int m, n, i, j;
    cin>>n>>m;
    char a[N][M];
    string x;
    bool meglatogatott[N][M];
    for (i=0; i<n; i++)
    {

        cin>>x;
        for (j=0; j<m; j++)
        {
            a[i][j]=x[j];
            meglatogatott[i][j]=false;
        }

    }
    a[n-1][m-1]='A';
    cout<<szamol(0, 0, n, m, a, meglatogatott)-1;
    return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask10/10
1Wrong answer3ms2808 KiB
2Wrong answer3ms2996 KiB
3Wrong answer3ms3120 KiB
4Wrong answer3ms3364 KiB
5Wrong answer3ms3532 KiB
6Wrong answer3ms3808 KiB
7Wrong answer3ms3984 KiB
8Wrong answer3ms4252 KiB
9Wrong answer3ms4508 KiB
10Wrong answer3ms4632 KiB
subtask20/12
1Wrong answer3ms4856 KiB
2Wrong answer3ms5104 KiB
3Wrong answer3ms5208 KiB
4Wrong answer3ms5152 KiB
5Wrong answer3ms5196 KiB
6Wrong answer3ms5224 KiB
7Wrong answer3ms5364 KiB
8Wrong answer3ms5544 KiB
9Wrong answer3ms5660 KiB
10Wrong answer3ms5700 KiB
subtask30/12
1Wrong answer3ms5636 KiB
2Wrong answer3ms5644 KiB
3Wrong answer3ms5640 KiB
4Wrong answer3ms5636 KiB
subtask40/16
1Wrong answer3ms5636 KiB
2Wrong answer3ms5656 KiB
3Wrong answer3ms5692 KiB
4Wrong answer3ms5716 KiB
5Wrong answer3ms5860 KiB
6Wrong answer3ms5848 KiB
7Wrong answer3ms5796 KiB
8Wrong answer3ms5772 KiB
9Wrong answer3ms5772 KiB
10Wrong answer3ms5764 KiB
subtask50/50
1Wrong answer6ms8836 KiB
2Wrong answer3ms7388 KiB
3Wrong answer6ms9196 KiB
4Wrong answer8ms10980 KiB
5Wrong answer35ms39564 KiB
6Wrong answer35ms39524 KiB
7Wrong answer8ms22656 KiB
8Wrong answer35ms39884 KiB
9Wrong answer41ms68228 KiB
10Wrong answer34ms54024 KiB