题目描述:
FST作为小朋友,经常会遇到和距离有关的问题,但是他已经厌倦了曼哈顿距离和欧几里德距离,所以FST就定义了一种FST距离。
这种距离并不用于空间或平面中,而运用于FST发明的一些神奇的算法中(唔… …)。
设i号元素的特征值为Ai,则i和j的FST距离是 |i2 - j2|+|Ai2 - Aj2|。
为了实现某新的数据结构,FST想在一大堆元素中找出距离最大的一对元素,他不关心是哪一对元素,只想求出最大距离。
输入描述:
第一行,一个正整数n,为元素个数。
第二行,n个正整数Ai为这n个元素的特征值。
n≤105,Ai≤109
输出描述:
一行,一个正整数表示最大距离。long long请用lld
输入:
2
4 3
输出:
10
题意:
题目描述
题解:
其实就是曼哈顿距离。把绝对值拿掉有四种情况,±,++,–,-+。最后得到的结果不是x * x + i * i就是x * x - i * i。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long ll;
const int maxn = 100000 + 5;
ll a[maxn],b[maxn];
int main(){
int n;
ll x;
while(scanf("%d",&n)!=EOF){
for(int i = 1; i <= n; i ++){
scanf("%lld",&x);
a[i] = x * x + 1LL * i * i;
b[i] = x * x - 1LL * i * i;
}
sort(a + 1,a + n + 1);
sort(b + 1,b + n + 1);
ll maxx = max(b[n] - b[1],a[n] - a[1]);
printf("%lld\n",maxx);
}
return 0;
}