1507:数组的贡献值

描述
罗少经常刷题,这天他又看到了一道很有意思的题目。
给定一个长度为 n 的数组,定义数组的贡献值为数组中 每个数首次出现的位置 * 每个数出现的次数 之和(相同的数字只计算一次)。
例如:1 2 2 3 1,数字 1 首次出现的位置是 1,总共出现了 2 次,所以提供 1 * 2 = 2 的贡献值,数字 2 是 2 * 2 = 4,数字 3 是 4 * 1 = 4,因此这个数组的贡献值为 2 + 4 + 4 = 10。
但很显然这样是难不倒罗少的,所以附加了一个条件,你可以任意改变数组中数的位置,问改变后数组最大的贡献值是多少?

输入
第一行是一个正整数 T 代表测试案例的数量。(1 <= T <= 10)
每组案例包含一个正整数 n ,代表数组的长度。(1 <= n <= 100000)
然后是 n 个整数 ai。(|ai| <= 10000)

输出
针对每组案例,输出改变数字位置后可以得到的最大数组贡献值,然后换行。

样例输入
2
4
1 2 1 2
4
1 1 2 2

样例输出
8
8

HINT
注意:数组也可以不发生改变。
对于样例1:1 2 1 2
改变前数组的贡献值为 1 * 2 + 2 * 2 = 6
你可以把他改为 1 1 2 2 或者 2 2 1 1 得到更大的数组的贡献值 8。

#include<iostream>
#include<cmath>
#include<string>
#include<string.h>
#include<algorithm>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值