#include<bits/stdc++.h>
using namespace std;
int n,mi,mj,a[19999][19999]; //记录格子
bool up,down,r,l;//上下左右方向
int temp;
int nr;//当前数字
int i=1,j=1;
int main(){
cin>>n>>mi>>mj;
int k=1;
nr=1;
while(mi!=1&&mi!=n&&mj!=1&&mj!=n&&n-2>k){
k++;
nr+=4*n-4;
n-=2;
mi--;
mj--;
}//先缩图(不是图论那个缩点,只是一个优化)
a[1][1]=nr;
for(int i=0;i<=n+1;i++){
for(int j=0;j<=n+1;j++){
if(i==0||j==0||i==n+1||j==n+1) a[i][j]=0x7f7f;
}
}
r=1;
int flag=0;
temp=n*n;
while(temp!=0){
if(flag) flag=0;
else temp--;
nr++;
if(r==1) j++;
if(l==1) j--;
if(up==1) i--;
if(down==1) i++;
if(a[i][j]!=0){
if(r==1) r=0,down=1,j--;
else if(l==1) l=0,up=1,j++;
else if(up==1) up=0,r=1,i++;
else if(down==1) down=0,l=1,i--;
nr--;
flag=1;
}
else a[i][j]=nr;
}
cout<<a[mi][mj]<<endl;
return 0;
}
为什么要MLE