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();
}
}