题目描述
设两个点的坐标分别为 (x,y)(x,y) 与 (x′,y′)(x′,y′),定义这两个点的城市距离为
∣x−x′∣+∣y−y′∣∣x−x′∣+∣y−y′∣
给定 nn 个点的坐标,请从中寻找两个点,使得它们的城市距离达到最大,输出这个最大值。
输入格式
- 第一行:单个整数 nn。
- 第二行到第 n+1n+1 行:每行有两个整数 xixi 和 yiyi,表示一个点的坐标。
输出格式
- 单个整数:表示最大的城市距离。
数据范围
- 对于 30%30% 的数据,2≤n≤5,0002≤n≤5,000;
- 对于 60%60% 的数据,2≤n≤50,0002≤n≤50,000;
- 对于 100%100% 的数据,2≤n≤500,0002≤n≤500,000。
- −500,000,000≤xi,yi≤500,000,000−500,000,000≤xi,yi≤500,000,000;
样例数据
输入:
4
0 0
0 1
1 3
3 2
输出:
5
说明:
(0,0)与(3,2)的城市距离是最大的
详见代码:
cpp
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
int maxa, maxs, mina, mins;
cin >> n;
for (int i = 1; i <= n; i++)
{
int x, y;
scanf("%d %d", &x, &y);
if (i == 1)
{
maxa = mina = x + y;
maxs = mins = x - y;
}
maxa = max(maxa, x + y);
mina = min(mina, x + y);
maxs = max(maxs, x - y);
mins = min(mins, x - y);
}
cout << max(maxa - mina, maxs - mins) << endl;
return 0;
}