54382023-06-01 14:34:26TimiFantasztikus Kaland Nyílországbancpp14Wrong answer 22/10035ms68408 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);
    return 0;
}
SubtaskSumTestVerdictTimeMemory
subtask110/10
1Accepted3ms2812 KiB
2Accepted3ms3080 KiB
3Accepted3ms3324 KiB
4Accepted3ms3556 KiB
5Accepted3ms3724 KiB
6Accepted3ms3800 KiB
7Accepted3ms3868 KiB
8Accepted3ms4120 KiB
9Accepted3ms4348 KiB
10Accepted3ms4336 KiB
subtask212/12
1Accepted3ms4476 KiB
2Accepted3ms4648 KiB
3Accepted3ms4840 KiB
4Accepted3ms4992 KiB
5Accepted3ms5176 KiB
6Accepted3ms5204 KiB
7Accepted3ms5220 KiB
8Accepted3ms5184 KiB
9Accepted3ms5192 KiB
10Accepted3ms5388 KiB
subtask30/12
1Accepted3ms5324 KiB
2Wrong answer3ms5324 KiB
3Accepted3ms5328 KiB
4Wrong answer3ms5456 KiB
subtask40/16
1Accepted3ms5456 KiB
2Wrong answer3ms5572 KiB
3Wrong answer3ms5736 KiB
4Wrong answer3ms5892 KiB
5Wrong answer3ms5952 KiB
6Wrong answer3ms5940 KiB
7Wrong answer3ms5892 KiB
8Wrong answer3ms5864 KiB
9Wrong answer3ms5964 KiB
10Wrong answer3ms5952 KiB
subtask50/50
1Accepted6ms9168 KiB
2Wrong answer3ms7720 KiB
3Wrong answer6ms9660 KiB
4Wrong answer8ms11232 KiB
5Wrong answer35ms39804 KiB
6Wrong answer32ms39768 KiB
7Accepted8ms22904 KiB
8Wrong answer32ms39936 KiB
9Wrong answer35ms68408 KiB
10Wrong answer35ms54204 KiB