题目链接:https://ac.nowcoder.com/acm/contest/877/J
时间限制:C/C++ 3秒,其他语言6秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
输入描述
输出描述
输入
2
2
4 3
4
5 4 -9 2
输出
10
84
解题思路
题意:求最大FST距离,即.
思路:我们可以令i>j,则上式有两种情况:
=i^2-j^2+Ai^2-Aj^2=i^2+Ai^2-(j^2-Aj^2);
或=i^2-j^2-Ai^2+Aj^2=i^2-Ai^2-(j^2-Aj^2);
故我们只需要分别求出i^2+Ai^2与i^2-Ai^2的最大最小值,然后求出最大最小值差的最大值。
#include <bits/stdc++.h>
using namespace std;
const long long INF = 0x3f3f3f3f3f3f3f3fLL;
int main() {
int t, n;
long long A, a, b, c, d, x, y;
scanf("%d", &t);
while(t--) {
scanf("%d", &n);
a = b = -INF, c = d = INF;
for (int i = 1; i <= n; i++) {
scanf("%lld", &A);
x = 1ll * i * i, y = A * A;
a = max(a, x + y), b = max(b, x - y);
c = min(c, x + y), d = min(d, x - y);
}
printf("%lld\n", max(a - c, b - d));
}
return 0;
}