首先使房间的行数n<列数,没有阻碍的话,是一半的n*1的矩形,有阻碍的话,除了在正中央的情况值比原来小1外,如果采用上下去填充的话是max(上,下),如果用左右去填充的话是min(左右),因为max(左右)那一部分可以采用上下的方式去填充,只要一半的n就就可以了, 然后取min (max(上,下),min(左右)),最个值如果比一半的n小的话,就改为一半的n,因为其它列还需要填充的
#pragma comment(linker, "/STACK:102400000,102400000")
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<vector>
#include<algorithm>
#include<cmath>
#include<map>
#include<queue>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1 | 1
#define lowbit(x) x&(-x)
using namespace std;
const int N=5e5+10;
long long INF=-1e15;
const int MOD=1e9+7;
int T,n,m,k,x,y;
int main()
{
#ifndef ONLINE_JUDGE
freopen("aaa","r",stdin);
#endif
int T;
while(~scanf("%d%d%d%d",&n,&m,&x,&y)){
if(n<=2 || m<=2){
puts("1");
continue;
}
if(n>m){
swap(n,m);
swap(x,y);
}
int len=(n+1)/2;
if(n==m && n&1 && x==y && x==(1+n)/2){
len--;
}else{
int right=m-y+1;
int left=y;
int up=x-1;
int down=n-x;
len=max(min(max(up,down),min(left,right)),len);
}
printf("%d\n",len);
}
return 0;
}