题解:因为男生周围都是女生,女生周围都是男生所以送糖男位置确定以后整张图就确定了。这时候你把所有女生全部抽出来组成一张图,从一个女生到另一个女生可以走的方向有8个(上下左右加对角线)然后每个相邻点之间的距离都是固定的(都是2),这时候这个题就变成了普通的bfs问题。
吐槽:刚开始看错题了,wa了半天,我****!
AC代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5+5;
int n,m,k;
int sx,sy;
struct node{
int x,y,dist;
};
unordered_map<int,int>st[N];
main(){
cin>>n>>m>>sx>>sy>>k;
queue<node>q;
if(sx-1>=1)q.push({sx-1,sy,1}),st[sx-1][sy]=1;
if(sx+1<=n)q.push({sx+1,sy,1}),st[sx+1][sy]=1;
if(sy-1>=1)q.push({sx,sy-1,1}),st[sx][sy-1]=1;
if(sy+1<=m)q.push({sx,sy+1,1}),st[sx][sy+1]=1;
int dx[8]={-1,-1,1,1,0,0,2,-2};
int dy[8]={-1,1,-1,1,2,-2,0,0};
int res=0;
while(q.size()){
auto t=q.front();
q.pop();
k--;
res+=t.dist*2;
if(k<=0){
cout<<res<<endl;
return 0LL;
}
for(int i=0;i<8;i++){
int a=t.x+dx[i],b=t.y+dy[i],dist=t.dist+2;
if(a<1||a>n||b<1||b>m)continue;
if(st[a][b])continue;
st[a][b]=1;
q.push({a,b,dist});
}
}
}