JGOJ P1507数组的贡献值
发布日期:2021-06-29 02:23:34
浏览次数:2
分类:技术文章
本文共 1175 字,大约阅读时间需要 3 分钟。
注意题目中的绝对值
描述
罗少经常刷题,这天他又看到了一道很有意思的题目。给定一个长度为 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 8HINT
**注意:**数组也可以不发生改变。对于样例1:1 2 1 2
改变前数组的贡献值为 1 * 2 + 2 * 2 = 6
你可以把他改为 1 1 2 2 或者 2 2 1 1 得到更大的数组的贡献值 8。
分析:注意题目的绝对值 记录数字的个数,然后从大到小排。#include#include using namespace std;bool cmp(int a, int b){ return a > b;}int main(){ int t; cin >> t; while (t--) { int n; cin >> n; int a[20002] = { 0 }; for (int i = 1; i <= n; i++) { int x; cin >> x; a[x+10000]++;// } sort(a, a + 20002,cmp);//快排 int p = n; long long int sum = 0; int flag = false; int j = 0; while (p > 1) { if (!flag) { p = p - a[j]+1; sum = sum + p * a[j]; flag = true; } else { p = p - a[j]; sum = sum + p * a[j]; } j++; } cout << sum << endl; }}
转载地址:https://blog.csdn.net/YYDS777/article/details/114491543 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月17日 01时05分47秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
学习笔记--目标检测中的nms非极大值抑制
2019-04-29
将一个文件夹下的json文件转到另一个文件下
2019-04-29
将某一文件夹下的部分文件移动到文件夹
2019-04-29
Appium移动自动化测试(二)安装JDK
2019-04-29
Appium移动自动化测试(三)安装SDK
2019-04-29
Appium移动自动化测试(四)安装Appnium desktop
2019-04-29
Appium下载安装教程及环境变量配置(安装教程)
2019-04-29
接口自动化铺垫(4)接口测试工具使用,浅析
2019-04-29
接口自动化铺垫(5)断言
2019-04-29
前后端分离解析(1)前端与后端
2019-04-29
前后端分离解析(二):串联前端与后端的API
2019-04-29
前后端分离解析(3):前后端分离测试思路
2019-04-29
前后端分离解析(四):项目采用前后端分离的原因
2019-04-29
前后端分离解析(五):前后端分离项目测试的循序渐进方式
2019-04-29
2021-06-09
2019-04-29
大数据期末大作业
2019-04-29
spark期末大作业
2019-04-29
java实例变量和静态变量的区别
2019-04-29
Java面向对象问题——全
2019-04-29
java集合部分题目整理总结
2019-04-29