Cod sursa(job #3312115)

Utilizator CalinPaun29Paun Calin CalinPaun29 Data 26 septembrie 2025 10:42:02
Problema Car Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
//#pragma GCC optimize("O3, Ofast, unroll-loops")
#include <bits/stdc++.h>
using namespace std;
int mat[505][505];
int mat2[505][505];
int mat3[505][505];
int d1[]={-1, -1, 0, 1, 1, 1, 0, -1};
int d2[]={0, 1, 1, 1, 0, -1, -1, -1};
struct stare
{
    int fi, se, dir;
};
signed main()
{
    ifstream cin("car.in");
    ofstream cout("car.out");
    int n, m, a1, a2, b1, b2, in, sf, mincnt=1000000;
    cin>>n>>m;
    cin>>a1>>b1>>a2>>b2;
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
            cin>>mat[i][j];
    }
    queue<stare> q[n*m*4];
    q[0].push({a1, b1, 2});
    for(int i=0; i<n*m*4; i++)
    {
        while(!q[i].empty())
        {
            int x=q[i].front().fi, y=q[i].front().se, z=q[i].front().dir;
            q[i].pop();
            if(x==a2 && y==b2)
            {
                if(mincnt>i)
                    mincnt=i;
            }
            for(int j=-2;j<=2;j++)
            {
                int xx=z+j;
                if(xx<0)
                    xx+=8;
                else if(xx>7)
                    xx-=8;

                if(x+d1[xx]>0 && x+d1[xx]<=n && y+d2[xx]>0 && y+d2[xx]<=m && mat[x+d1[xx]][y+d2[xx]]==0)
                {
                    q[i+max(j, (-1)*j)].push({x+d1[xx], y+d2[xx], xx});
                }
            }
        }
    }
    cout<<mincnt;
    return 0;
}