Wannafly模拟赛4 B Distance

题目链接: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想在一大堆元素中找出距离最大的一对元素,他不关心是哪一对元素,只想求出最大距离。

输入描述:

第一行,一个正整数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;
 
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值