求调玄关
查看原帖
求调玄关
769134
False0099楼主2024/10/14 20:03

ATCODER上只有一个点没有过,求调:

#include <bits/stdc++.h>
#define int long long
#define endl '\n'
int INF=0x3f3f3f3f3f3f3f3f3f3f;
using namespace std;
typedef pair<int,int> PII;
void init(){
    
}

void solve(){
    int xa,ya,xb,yb,xc,yc;
    cin>>xa>>ya>>xb>>yb>>xc>>yc;
    set<PII> st;
    if(xa==xb&&xb==xc){
        int sum=0;
        if(yc<=ya&&ya<=yb){
            sum+=abs(xa-xb)+abs(ya-(yb+1));
            sum+=2;
            sum+=abs(xb-xc)+abs(yb-yc);
        }else if(yb<=ya&&ya<=yc){
            //sum+=abs()
            sum+=abs(xa-xb)+abs(ya-(yb-1));
            sum+=2;
            sum+=abs(xb-xc)+abs(yb-yc);
        }else{
            if(ya<yb){
                sum+=abs(xa-xb)+abs(ya-(yb-1));
            }else{
                sum+=abs(xa-xb)+abs(ya-(yb+1));
            }
            sum+=abs(xb-xc)+abs(yb-yc);
        }
        cout<<sum<<endl;
        return;
    }
    if(ya==yb&&yb==yc){
        int sum=0;
        if(xc<=xa&&xa<=xb){
            sum+=abs(ya-yb)+abs(xa-xb-1);
            sum+=2;
            sum+=abs(yb-yc)+abs(xb-xc);
        }else if(xb<=xa&&xa<=xc){
            //sum+=abs()
            sum+=abs(ya-yb)+abs(xa-xb+1);
            sum+=2;
            sum+=abs(yb-yc)+abs(xb-xc);
        }else{
            if(xa<xb){
                sum+=abs(ya-yb)+abs(xa-(xb-1));
            }else{
                sum+=abs(ya-yb)+abs(xa-(xb+1));
            }
            sum+=abs(yb-yc)+abs(xb-xc);
        }
        cout<<sum<<endl;
        return;
    }
    if(xc>xb){
        st.insert({xb-1,yb});
        //cerr<<"1";
    }else if(xc<xb){
        st.insert({xb+1,yb});
        //cerr<<"1";
    }
    //cerr<<yc<<" "<<yb<<endl;
    if(yc>yb){
        //cerr<<"2";
        st.insert({xb,yb-1});
    }else if(yc<yb){
        //cerr<<"2";
        st.insert({xb,yb+1});
    }
    //cerr<<st.size()<<endl;
    int sum=INF;
    for(auto [u,v]:st){
        int tmp=0;
        tmp+=abs(u-xa)+abs(v-ya);
        //tmp+=abs(xb-xc)+abs(yb-yc);
        sum=min(sum,tmp);
    }
    sum+=abs(xb-xc)+abs(yb-yc);
    if(st.size()<=1){
        cout<<sum<<endl;
    }else{
        cout<<sum+2<<endl;
    }
//    cout<<sum<<endl;

}
signed main(){
    ios::sync_with_stdio(false),cin.tie(0);
    int t;
    t=1;
//    cin>>t;
    init();
    while(t--){
        solve();
    }
}
2024/10/14 20:03
加载中...