列表

详情


NC14268. Distance

描述

FST作为小朋友,经常会遇到和距离有关的问题,但是他已经厌倦了曼哈顿距离和欧几里德距离,所以FST就定义了一种FST距离。
这种距离并不用于空间或平面中,而运用于FST发明的一些神奇的算法中(唔... ...)。
设i号元素的特征值为Ai,则i和j的FST距离是 |i2 - j2|+|Ai2 - Aj2|。
为了实现某新的数据结构,FST想在一大堆元素中找出距离最大的一对元素,他不关心是哪一对元素,只想求出最大距离。

输入描述

第一行,一个正整数n,为元素个数。
第二行,n个正整数Ai为这n个元素的特征值。

输出描述

一行,一个正整数表示最大距离。long long请用lld

示例1

输入:

2
4 3

输出:

10

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++ 11.0.1) 解法, 执行用时: 57ms, 内存消耗: 1972K, 提交时间: 2022-10-12 14:28:17

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
	ll n,a[100010],b[100010],ans,x;
    cin>>n;
	for(ll i=1;i<=n;i++)
	{
		cin>>x;
		a[i]=i*i+x*x,b[i]=i*i-x*x;
	}
	sort(a+1,a+n+1);
	sort(b+1,b+n+1);
	ans=max(a[n]-a[1],b[n]-b[1]);
	cout<<ans;
}

Python3(3.5.2) 解法, 执行用时: 629ms, 内存消耗: 5876K, 提交时间: 2017-11-02 16:00:50

n=int(input())
x=0
ans=0
m1=0
m2=0
for i in range(1,n+1):
   x=int(input())
   if i>1:
      ans=max(ans,x*x+i*i+m1)
      ans=max(ans,-x*x+i*i+m2)
      m1=max(m1,-x*x-i*i)
      m2=max(m2,x*x-i*i)
   else:
      m1=-x*x-i*i
      m2=x*x-i*i
print(ans)

上一题