A - 夺宝奇兵

很简单的一道题,相邻两组宝藏走法只有两种交叉走,或者平行走(就是一号第一个宝藏走到二号第二个或者一号第一个走到二号第一个),所以for扫一遍去min就可以了

#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+7;
int a[maxn],b[maxn];
ll dis(int i,int j){
    return abs(a[i]-a[j])+abs(b[i]-b[j]);
}
int main(){
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=0;i<2*n;i++)scanf("%d%d",&a[i],&b[i]);
    ll ans=dis(2*n-1,2*n-2);
    for(int i=2;i<2*n;i+=2){
        ans+=min(dis(i,i-2)+dis(i+1,i-1),dis(i,i-1)+dis(i+1,i-2));
    }
    printf("%lld\n",ans);
}