不难发现,我们可以把所有路程分为两部分,一部分是起点到终点,一种是上一牛的终点到下一牛的起点。因此我们可以对起点和终点分别排序,依次经过最小的起点,最小的终点---,可以证明这样是最小的吧。排序不等式?
int main() {
freopen("taxi.in", "r", stdin);
freopen("taxi.out", "w", stdout);
read(n);
read(m);
rep(i, 1, n) {
read(s[i]);
read(t[i]);
ans += abs(t[i] - s[i]);
}
std::sort(s + 1, s + n + 1);
std::sort(t + 1, t + n + 1);
rep(i, 1, n) {
ans += abs(s[i] - t[i - 1]);
}
out(ans + m - t[n], '\n');
return 0;
}