import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
long a[]=new long[n];
// 这题其实就是曼哈顿距离转切比雪夫
// 就是分两种情况讨论,求这两种情况中最大值
// 第一种,假如两边都是正的
// 第二种情况,左边正右边负
long b[]=new long[n];
long c[]=new long[n];
for (int i = 0; i < a.length; i++) {
a[i]=scanner.nextInt();
b[i]=a[i]*a[i]+(long)(i+1)*(i+1);
c[i]=a[i]*a[i]-(long)(i+1)*(i+1);
}
Arrays.sort(b);
Arrays.sort(c);
long max=Math.max(b[n-1]-b[0], c[n-1]-c[0]);
// long max=-1;
// for (int i = 0; i < a.length; i++) {
// for (int j = i+1; j < a.length; j++) {
// long dist=(j+1)*(j+1)-(i+1)*(i+1)+Math.abs(a[i]*a[i]-a[j]*a[j]);
// if(dist>max)max=dist;
// }
// }
System.out.println(max);
}
}
这题我主要是被数据范围给恶心到了,我没想到原来一个int与int相乘如果超过范围会自动变成负数,哪怕前面用来装这个结果的数据类型是long。还有就是(i+1)*(i+1)那个地方也是同样的问题,要强转



京公网安备 11010502036488号