链接:

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());
}
}

最新文章

  1. 【.net 深呼吸】细说CodeDom(1):结构大观
  2. .NET单元测试的艺术-3.测试代码
  3. PAT A 1018. Public Bike Management (30)【最短路径】
  4. VBA_Excel_教程:单元格颜色
  5. 由于xrdp、gnome和unity之间的兼容性问题,在
  6. JavaScript权威指南学习笔记6
  7. Remote小Demo
  8. php添加gd
  9. lufylegend库 鼠标事件 循环事件 键盘事件
  10. 如何将mysql数据导入Hadoop之Sqoop安装
  11. 基于.netcore 开发的轻量Rpc框架
  12. JavaWeb项目架构之Kafka分布式日志队列
  13. ccos2d-x 学习
  14. 解决在圆角手机(如小米8)上自定义Dialog无法全屏的问题
  15. python验证卡普耶卡(D.R.Kaprekar)6174猜想
  16. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-&gt;用户管理模块新增“重置用户密码”功能
  17. 02-HTML5新的input属性
  18. spark优化之临时目录
  19. mysql8.0遇到删除外键的错误
  20. is和==的区别以及编码、解码

热门文章

  1. HDU4089(概率dp)
  2. [github][https模式下提交记住密码]
  3. SVN中如何去除版本控制器
  4. Spring AOP初步总结(一)
  5. springMVC 与 struts+hibernate+spring优缺点
  6. Java基础之入门介绍
  7. Django数据库创建与查询及ORM的概念
  8. CF1025C Plasticine zebra
  9. Android用Intent来启动Service报“java.lang.IllegalArgumentException: Service Intent must be explicit”错误的解决方法
  10. uvm_reg_sequence——寄存器模型(六)