题目链接:https://codeforces.com/contest/24/problem/D
#include <iostream>
using namespace std;
typedef double db;
static const int MAXN=1000+10;
db dp[MAXN][MAXN];
int n,m,x,y;
int main()
{
scanf("%d%d%d%d",&n,&m,&x,&y);
for(int i=n-1;i;i--)
for(int k=0;k<100;k++)
for(int j=m;j;j--)
{
if(m==1) dp[i][j]=1.0/2*(dp[i][j]+dp[i+1][j])+1;
else if(j==1) dp[i][j]=1.0/3*(dp[i][1]+dp[i][2]+dp[i+1][j])+1;
else if(j==m) dp[i][j]=1.0/3*(dp[i][m-1]+dp[i][m]+dp[i+1][j])+1;
else dp[i][j]=1.0/4*(dp[i][j]+dp[i][j-1]+dp[i][j+1]+dp[i+1][j])+1;
}
printf("%.8lf\n",dp[x][y]);
return 0;
}