正题
luogu题目链接:https://www.luogu.org/problemnew/show/P3076
题目大意
有若干个请求si,tis_i,t_isi,ti表示一个牛要从sis_isi到tit_iti。一辆只能装一只牛的车,从1出发mmm结束。求最少行驶距离。
解题思路
首先对于每个要求一定要计算∣ti−si∣|t_i-s_i|∣ti−si∣的,但是考虑多行走的费用。
我们发现每次走到一个起点时将现在的牛丢下之后再回来载时是最优的。
所以我们可以排个序计算多余费用
codecodecode
#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);
}