1 条题解
-
0
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
- 上传者