牛客网暑期ACM多校训练营(第四场)G Maximum Mode(思维)
2024-08-29 20:31:38
链接:
https://www.nowcoder.com/login?callBack=%2Facm%2Fcontest%2F142%2FG
题意:
给定n个数, 要求删去恰好m个数后的最大总数是多少。
分析:
要使一个数是众数, 只要比他大的数的数量都比自己小就行。
预处理出全部出现次数的最大数(例如, 出现3次最大的是1,出现2次最大的是2等等)。
然后从最大的次数开始枚举, 只关注该次数和比该次数大的数(前缀和),求出每次删的minDel即可。
#include <bits/stdc++.h>
using namespace std;
const int maxN = 1e5 + ;
map<int, int> cnt, Max, t;
int pre[maxN];
int n, m;
int judge(){
int sum = , k = , ans = -;
for(auto it = Max.rbegin(); it != Max.rend(); it++){
int a = it -> first, b = it -> second; //a是次数, b是该次数下最大的数
k += t[a];//k是当前有多少种数
sum += a * t[a]; //只考虑自己和次数比自己大的数的总数
int minDel = sum - (a-) * k - ; //要减去的数
if(minDel <= m){//只要该数小于等于m即可, 剩下的m - minDel随便减
ans = max(ans, b);
}
}
return ans;
}
int main() {
int T;
scanf("%d", &T);
while(T--) {
cnt.clear();
Max.clear();
t.clear();
scanf("%d %d", &n, &m);
for(int i = ; i < n; i++) {
int num;
scanf("%d", &num);
cnt[num]++;
}
for(auto it : cnt){
int a = it.first, b = it.second;
Max[b] = max(Max[b], a);
t[b]++;
}
printf("%d\n", judge());
}
}
最新文章
- 【.net 深呼吸】细说CodeDom(1):结构大观
- .NET单元测试的艺术-3.测试代码
- PAT A 1018. Public Bike Management (30)【最短路径】
- VBA_Excel_教程:单元格颜色
- 由于xrdp、gnome和unity之间的兼容性问题,在
- JavaScript权威指南学习笔记6
- Remote小Demo
- php添加gd
- lufylegend库 鼠标事件 循环事件 键盘事件
- 如何将mysql数据导入Hadoop之Sqoop安装
- 基于.netcore 开发的轻量Rpc框架
- JavaWeb项目架构之Kafka分布式日志队列
- ccos2d-x 学习
- 解决在圆角手机(如小米8)上自定义Dialog无法全屏的问题
- python验证卡普耶卡(D.R.Kaprekar)6174猜想
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->;用户管理模块新增“重置用户密码”功能
- 02-HTML5新的input属性
- spark优化之临时目录
- mysql8.0遇到删除外键的错误
- is和==的区别以及编码、解码
热门文章
- HDU4089(概率dp)
- [github][https模式下提交记住密码]
- SVN中如何去除版本控制器
- Spring AOP初步总结(一)
- springMVC 与 struts+hibernate+spring优缺点
- Java基础之入门介绍
- Django数据库创建与查询及ORM的概念
- CF1025C Plasticine zebra
- Android用Intent来启动Service报“java.lang.IllegalArgumentException: Service Intent must be explicit”错误的解决方法
- uvm_reg_sequence——寄存器模型(六)