LuoguP7713 「EZEC-10」打分 题解
Content
某个人去参加比赛,\(n\) 个评委分别给他打分 \(a_1,a_2,\dots,a_n\)。这个人可以最多执行 \(m\) 次操作,每次操作将一个评委的分数加 \(1\)。定义他的最终分数为去掉一个最高分和一个最低分后的剩余得分的总和。求可能最高的最终分数。
数据范围:\(3\leqslant n\leqslant 10^5\),\(0\leqslant m,a_i\leqslant 10^9\)。
Solution
本题解我们来分 Subtask 来讲解。
Subtask 1 (5 pts):\(m=0\)
这一个部分分其实是很好拿的。我们只需要将所有评委的分数排个序,然后统计一下第 \(2\sim n-1\) 个人的分数和即可。
Subtask 2 (10 pts):\(n=3\)
这个 Subtask 对于启发正解很有作用。
我们不妨先花费若干次操作,把第 \(2\) 高的分数和最高的分数齐平。当然在这里如果就把操作数给用完了,那么就直接可以统计结果了。
如果第 \(2\) 高的分数和最高的分数齐平了的时候,操作数还没有用完,我们就把剩余的操作数平均分成两份(如果多出了一份先丢在一边)。然后我们把这两份分别分给第 \(2\) 高的分数和最高的分数。多出的一份无论分给谁都不会影响最终的结果,因此就可以直接输出第 \(2\) 高的分数了。
Subtask 3 (15 pts):\(n,m\leqslant 10^3\)
这个 Subtask 你随便怎么暴力模拟应该都可以过,因此不做赘述。
Subtask 4 (70 pts):正解
我们回到 Subtask 2,受到其中均分的启发,我们不妨先让第 \(2\sim n-1\) 高的分数和最高的分数齐平。当然在这里如果就把操作数给用完了,那么就直接可以统计结果了。
如果全部齐平了还没用完操作,我们就把剩余的操作数平均分成 \(n-1\) 份(多出的分不出来的操作数先丢在一边,留做备用)。然后先把这 \(n-1\) 份平均分给第 \(1\sim n-1\) 高的分数,然后再去看是否多出的操作数。如果有多出的操作数,我们将一个操作数分给最高的分数,再将剩余的操作数随便分给第 \(2\sim n-1\) 的分数中的任意几个(每个人分 \(1\) 个操作数)就可以了。
Code
ll a[100007];
int main() {
int n = Rint; ll m = Rll;
ll ans = 0;
F(int, i, 1, n) a[i] = Rint;
sort(a + 1, a + n + 1);
if(m) {
F(int, i, 2, n - 1) {
int add = min(a[n] - a[i], m);
a[i] += add, m -= add;
}
int sum = m / (n - 1) * (n - 1), eve = sum / (n - 1);
F(int, i, 2, n) a[i] += eve;
m -= sum;
if(m) {
a[n]++, m--;
F(int, i, 2, n - 1)
a[i] = a[i] + min(1ll, m), m = max(m - 1, 0ll);
}
}
F(int, i, 2, n - 1) ans += a[i];
return write(ans), 0;
}
LuoguP7713 「EZEC-10」打分 题解的更多相关文章
- 「GXOI / GZOI2019」简要题解
「GXOI / GZOI2019」简要题解 LOJ#3083. 「GXOI / GZOI2019」与或和 https://loj.ac/problem/3083 题意:求一个矩阵的所有子矩阵的与和 和 ...
- loj#2054. 「TJOI / HEOI2016」树
题目链接 loj#2054. 「TJOI / HEOI2016」树 题解 每次标记覆盖整棵字数,子树维护对于标记深度取max dfs序+线段树维护一下 代码 #include<cstdio> ...
- 【题解】#6622. 「THUPC 2019」找树 / findtree(Matrix Tree+FWT)
[题解]#6622. 「THUPC 2019」找树 / findtree(Matrix Tree+FWT) 之前做这道题不理解,有一点走火入魔了,甚至想要一本近世代数来看,然后通过人类智慧思考后发现, ...
- 洛谷比赛 「EZEC」 Round 4
洛谷比赛 「EZEC」 Round 4 T1 zrmpaul Loves Array 题目描述 小 Z 有一个下标从 \(1\) 开始并且长度为 \(n\) 的序列,初始时下标为 \(i\) 位置的数 ...
- 【转】具透 | 你可能不知道,iOS 10 有一个中国「特供」的联网权限功能
9 月底,苹果正式在北京成立了苹果中国研发中心.近几年,我们也在每年更新的 iOS 系统中不断看到,苹果对中国市场的关照.从早前的九宫格输入法,到最近的骚扰电话拦截,都照顾了国内用户的需求. 在 iO ...
- Windows 10 如何使用「系统还原」功能备份系统状态和配置
https://www.sysgeek.cn/windows-10-system-restore/ 在 Windows 10 系统中,「系统还原」功能旨在创建配置快照,并在检测到系统更改时将其工作状态 ...
- 「POJ 3666」Making the Grade 题解(两种做法)
0前言 感谢yxy童鞋的dp及暴力做法! 1 算法标签 优先队列.dp动态规划+滚动数组优化 2 题目难度 提高/提高+ CF rating:2300 3 题面 「POJ 3666」Making th ...
- LOJ #2538. 「PKUWC 2018」Slay the Spire (期望dp)
Update on 1.5 学了 zhou888 的写法,真是又短又快. 并且空间是 \(O(n)\) 的,速度十分优秀. 题意 LOJ #2538. 「PKUWC 2018」Slay the Spi ...
- 「LOJ#10051」「一本通 2.3 例 3」Nikitosh 和异或(Trie
题目描述 原题来自:CODECHEF September Challenge 2015 REBXOR 1≤r1<l2≤r2≤N,x⨁yx\bigoplus yx⨁y 表示 ...
随机推荐
- arm中断汇编
IRQ_Handler: push {lr} /* 保存 lr 地址 */ push {r0-r3, r12} /* 保存 r0-r3,r12 寄存器 */ mrs r0, spsr /* 读取 sp ...
- Neville 插值方法
简介 wikipedia: Neville's method 在数学上,Neville 算法是一种计算插值多项式方法,由数学家Eric Harold Neville提出.由给定的n+1个节点,存在一个 ...
- [R] read.table/read.delim读入数据行数变少?
以为对read.table/read.delim很熟了,谁知又掉坑里了. 我有个3万多行的数据集,包括样品表达量和注释信息.大概长这样: 本来3万多行,可是读进来的时候变成了1万多行,而且read.d ...
- Python基础之赋值与注释
目录 1. 花式赋值 1.1 链式赋值 1.2 交叉赋值 1.3 交叉赋值(解压缩) 2. 注释 2.1 单行注释 2.2 多行注释 1. 花式赋值 1.1 链式赋值 a = 10 b = 10 c ...
- 18-Rotate Array-Leetcode
Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the array ...
- 14-Reverse Integer
思路: 先判定符号,整型范围[-2^32,2^32] 取余除10操作,依次进行,越界返回0 Reverse digits of an integer. Example1: x = 123, retur ...
- lua_newthread的真正意义
lua_newthread 这个接口,存在误导性,很多人第一次试图用它来解决多线程问题时,都会入坑. 实际上,这个接口真正的用法,是给那些在lua更底层的某些行为(通常是递归)导致了lua的栈溢出而准 ...
- TD课程通最终版本体验
功能上,新版本增加了学校教室的上课情况,有无课程可以清楚查询,如下图: 在添加课程的设置上有改进,相比于之前编辑课程后不能保存,新版本在可保存的基础上又增加了登陆教务系统的功能,学生使用更加方便快捷, ...
- github小白的记录随笔
此文章是基础本地安装好了git环境的新手小白. 进入您要上传项目的根路径,右键选择Git Bash Here. 输入命令: git init //初始化git仓库环境 git remote add o ...
- adjective
形容词用来描述名词或代词:副词用来描述剩下的(动词.形容词.副词和整句).adverb: to word. Adjectives are used almost exclusively to modi ...