玄关,求条
查看原帖
玄关,求条
1706408
chemical_reaction楼主2025/8/29 17:38

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;
}
2025/8/29 17:38
加载中...