那么答案无非是五种,第一种 最小的边+1除2,坏点上下左右到边界的距离,无非是这五种按某种规则比较比较就好了。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int main() { int n,m,x,y; while(scanf("%d%d%d%d",&n,&m,&x,&y)!=EOF) { if(n>m) { swap(n,m); swap(x,y); } int ans=0; if(n==1&&m==1) ans=0; if(n==m&&n%2&&x==(n+1)/2&&y==(m+1)/2) { printf("%d\n",n/2); continue; } int c0=min(x,n-x+1); int c1=min(y,m-y+1); int s=(n+1)/2; ans = max(s,min(n-c0,c1)); printf("%d\n",ans); } }