21.11.16模拟 出租车

不难发现,我们可以把所有路程分为两部分,一部分是起点到终点,一种是上一牛的终点到下一牛的起点。因此我们可以对起点和终点分别排序,依次经过最小的起点,最小的终点---,可以证明这样是最小的吧。排序不等式?


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;
}

本文来自博客园,作者:{2519},转载请注明原文链接:https://www.cnblogs.com/QQ2519/p/15561854.html

原文地址:https://www.cnblogs.com/QQ2519/p/15561854.html