AcWing 1902. 马拉松

2023-05-12,,

题目链接

每次路程改变只对前后两点间距离有影响,因此每次都判断当前三个点之间的距离之和与去掉中间点的距离哪个更优即可,最后取最大值作为结果输出。

#include<iostream>
#include<cmath> using namespace std; const int N = 100010; int x[N], y[N]; int dis(int a,int b)
{
return abs(x[a] - x[b]) + abs(y[a] - y[b]);
} int main(){
int n, s=0, mx=0;
cin>>n;
for(int i=1;i<=n;i++)
cin>>x[i]>>y[i];
for(int i=2;i<=n;i++)
s+=dis(i-1, i);
for(int i=2;i<=n-1;i++)
mx = max(mx, dis(i-1, i) + dis(i+1, i) - dis(i-1, i+1));
cout<<s-mx;
return 0;
}

AcWing 1902. 马拉松的相关教程结束。

《AcWing 1902. 马拉松.doc》

下载本文的Word格式文档,以方便收藏与打印。