题目链接:https://www.nowcoder.com/acm/contest/16/B
时间限制:1秒
空间限制:131072K
题目描述
FST作为小朋友,经常会遇到和距离有关的问题,但是他已经厌倦了曼哈顿距离和欧几里德距离,所以FST就定义了一种FST距离。
这种距离并不用于空间或平面中,而运用于FST发明的一些神奇的算法中(唔... ...)。
设i号元素的特征值为A i,则i和j的FST距离是 |i 2 - j 2|+|A i 2 - A j 2|。
为了实现某新的数据结构,FST想在一大堆元素中找出距离最大的一对元素,他不关心是哪一对元素,只想求出最大距离。
这种距离并不用于空间或平面中,而运用于FST发明的一些神奇的算法中(唔... ...)。
设i号元素的特征值为A i,则i和j的FST距离是 |i 2 - j 2|+|A i 2 - A j 2|。
为了实现某新的数据结构,FST想在一大堆元素中找出距离最大的一对元素,他不关心是哪一对元素,只想求出最大距离。
输入描述:
第一行,一个正整数n,为元素个数。 第二行,n个正整数Ai为这n个元素的特征值。
输出描述:
一行,一个正整数表示最大距离。long long请用lld
示例1
输入
2 4 3
输出
10
备注:
n≤105,Ai≤109
解析:曼哈顿距离,去掉绝对值计算就好了,一共四种情况,即 > > / > < / < > / < < 简化下就是两种情况
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL a[100005], b[100005];
int main()
{
int i, n;
LL x;
scanf("%d", &n);
for(i = 0; i < n; i++)
{
scanf("%lld", &x);
a[i] = x*x + (LL)(i+1)*(i+1);
b[i] = x*x - (LL)(i+1)*(i+1);
}
sort(a, a+n);
sort(b, b+n);
printf("%lld\n", max(b[n-1]-b[0], a[n-1]-a[0]));
return 0;
}