正题
luogu题目链接:https://www.luogu.org/problemnew/show/P3076
题目大意
有若干个请求 s i , t i s_i,t_i si,ti表示一个牛要从 s i s_i si到 t i t_i ti。一辆只能装一只牛的车,从1出发 m m m结束。求最少行驶距离。
解题思路
首先对于每个要求一定要计算
∣
t
i
−
s
i
∣
|t_i-s_i|
∣ti−si∣的,但是考虑多行走的费用。
我们发现每次走到一个起点时将现在的牛丢下之后再回来载时是最优的。
所以我们可以排个序计算多余费用
c o d e code code
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=101000;
ll n,m,s[N],t[N],ans;
int main()
{
scanf("%lld%lld",&n,&m);
for(ll i=1;i<=n;i++)
scanf("%lld%lld",&s[i],&t[i]),
ans+=abs(s[i]-t[i]);
s[++n]=m;t[n]=0;
sort(s+1,s+1+n);
sort(t+1,t+1+n);
for(ll i=1;i<=n;i++)
ans+=abs(s[i]-t[i]);
printf("%lld",ans);
}