CF1428A Box is Pull 题解

Content

有一个兔子拖着一个盒子在走,每秒钟可以带着盒子走一个单位,也可以不带着盒子走一个单位。当且仅当兔子和盒子的距离不超过 \(1\) 时可以带着盒子走一个单位。现给出 \(t\) 次询问,每次询问给出四个整数 \(x_1,y_1,x_2,y_2\),试求出将盒子从 \((x_1,y_1)\) 拖到 \((x_2,y_2)\) 最少需要多少秒。

数据范围:\(1\leqslant t\leqslant 1000,1\leqslant x_1,y_1,x_2,y_2\leqslant 10^9\)

Solution

谨以此纪念本人的第一场 CF。

我们根据三个情况来分类讨论:

  1. \(x_1=x_2\),此时直接向平行于 \(y\) 轴的方向移动即可,答案就是 \(|y_1-y_2|\)
  2. \(y_1=y_2\),此时直接向平行于 \(x\) 轴的方向移动即可,答案就是 \(|x_1-x_2|\)
  3. \(x_1\neq x_2\)\(y_1\neq y_2\),此时先往一个方向走,再转到另一个方向去走,由题目可知,转向需要让兔子先移动 \(2\) 个单位,所以答案就是 \(|x_1-x_2|+|y_1-y_2|+2\)

直接根据每个情况输出答案即可。

Code

int t, x1, y1, x2, y2;

int main() {
	getint(t);
	while(t--) {
		int ans = 0;
		getint(x1), getint(y1), getint(x2), getint(y2);
		if(x1 == x2)		ans = abs(y1 - y2);
		else if(y1 == y2)	ans = abs(x1 - x2);
		else	ans = abs(x1 - x2) + abs(y1 - y2) + 2;
		writeint(ans), puts("");
	}	
	return 0;
}
posted @ 2021-12-16 15:18  Eason_AC  阅读(28)  评论(0)    收藏  举报