rt
#include <bits/stdc++.h>
using namespace std;
int main()
{
int W,H,Sx,Sy,Ex,Ey;
cin>>W>>H>>Sx>>Sy>>Ex>>Ey;
int r=H/2,c=W/2;
vector<vector<int>> mp(r,vector<int>(c));
for(int i=r-1;i>=0;i--)
for(int j=c-1;j>=0;j--)
cin>>mp[i][j];
double sx=Sx+0.5;
double sy=Sy+0.5;
double ex=Ex+0.5;
double ey=Ey+0.5;
double dx=ex-sx;
double dy=ey-sy;
double hl_dis=sqrt(dx*dx+dy*dy);
int si=int(sx/2.0);
int sj=int(sy/2.0);
int ei=int(ex/2.0);
int ej=int(ey/2.0);
double cur_h=mp[sj][si];
double e_h=mp[ej][ei];
if (si == ei && sj == ej) {
double tot=hl_dis+abs(cur_h-e_h);
cout<<fixed<<setprecision(12)<<tot<<endl;
return 0;
}
double x=sx;
double y=sy;
double step=max(abs(dx),abs(dy));
double x_inc=dx/step;
double y_inc=dy/step;
double ver_dis=0.0;
set<pair<int,int>> vis;
vis.insert({si,sj});
for (int i=0;i<int(step)+1;i++) {
x+=x_inc;
y+=y_inc;
int cur_i=int(x/2.0);
int cur_j=int(y/2.0);
if (cur_i<0) cur_i=0;
if (cur_i>=c) cur_i=c-1;
if (cur_j<0) cur_j=0;
if (cur_j>=r) cur_j=r-1;
if (!vis.count({cur_i,cur_j})) {
vis.insert({cur_i,cur_j});
double n_h=mp[cur_j][cur_i];
ver_dis+=abs(n_h-cur_h);
cur_h=n_h;
}
}
ver_dis+=abs(e_h-cur_h);
double tot_len=hl_dis+ver_dis;
cout<<fixed<<setprecision(12)<<tot_len<<endl;
return 0;
}