1 条题解

  • 0
    @ 2023-6-21 20:14:12

    C++ :

    #include <iostream>
    #include <cstdio>
    #include <cctype>
    #include <cstring>
    #define _for(i,a,b) for (int i=(a); i<=(b); ++i)
    
    using namespace std;
    
    inline int read()
    {
        int w=0,X=0; char ch=0;
        while(!isdigit(ch)) {w|=ch=='-'; ch=getchar();}
        while(isdigit(ch)) {X=(X<<3)+(X<<1)+(ch^48); ch=getchar();}
        return w ? -X : X;
    }
    
    struct node{int x,y;}q[400000][2];
    int T,l,ans;
    int dis[2][400][400],tail[2],head[2],dx[9]={0,1,2,2,1,-1,-2,-2,-1},dy[9]={0,2,1,-1,-2,-2,-1,1,2};
    bool flag=false; bool vis[2][400][400]; 
    
    inline void expand(int t)
    {
        int x=q[++head[t]][t].x,y=q[head[t]][t].y;
        _for(i,1,8)
        {
            int tx=x+dx[i],ty=y+dy[i];
            if(tx<1 || tx>l || ty<1 || ty>l || vis[t][tx][ty]) continue;
            q[++tail[t]][t].x=tx; q[tail[t]][t].y=ty;
            vis[t][tx][ty]=true; dis[t][tx][ty]=dis[t][x][y]+1;
            if(vis[!t][tx][ty])
    		{
    			ans=dis[t][tx][ty]+dis[!t][tx][ty];
    			flag=true;
    			return;
    		}
        }
    }
    
    int main()
    {
        T=read();
        while(T--)
        {
            l=read(); flag=false;
            int x1=read(),y1=read();
            int x2=read(),y2=read();
            if(x1==x2 && y1==y2) {printf("%d\n",0); goto fuck;};
            memset(vis, false, sizeof(vis)); memset(dis, 0, sizeof(dis));
            vis[0][x1][y1]=true; vis[1][x2][y2]=true;
            tail[0]=1; tail[1]=1; head[0]=0; head[1]=0;
            q[1][0].x=x1; q[1][0].y=y1;
            q[1][1].x=x2; q[1][1].y=y2;
            while(tail[0]>head[0] && tail[1]>head[1])
            {
                if(tail[0]>tail[1]) expand(1);
                else expand(0);
                if(flag) break;
            }
            printf("%d\n",ans);
            fuck : continue;
        }
        return 0;
    }
    
    • 1

    信息

    ID
    1062
    时间
    1000ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    3
    已通过
    3
    上传者