链接:https://www.nowcoder.com/acm/contest/142/G
来源:牛客网

The mode of an integer sequence is the value that appears most often. Chiaki has n integers a1,a2,...,an. She woud like to delete exactly m of them such that: the rest integers have only one mode and the mode is maximum.

输入描述:

There are multiple test cases. The first line of input contains an integer T, indicating the number of test cases. For each test case:
The first line contains two integers n and m (1 ≤ n ≤ 105, 0 ≤ m < n) -- the length of the sequence and the number of integers to delete.
The second line contains n integers a1, a2, ..., an (1 ≤ ai ≤ 109) denoting the sequence.
It is guaranteed that the sum of all n does not exceed 106.

输出描述:

For each test case, output an integer denoting the only maximum mode, or -1 if Chiaki cannot achieve it.

输入例子:
5
5 0
2 2 3 3 4
5 1
2 2 3 3 4
5 2
2 2 3 3 4
5 3
2 2 3 3 4
5 4
2 2 3 3 4
输出例子:
-1
3
3
3
4

-->

示例1

输入

5
5 0
2 2 3 3 4
5 1
2 2 3 3 4
5 2
2 2 3 3 4
5 3
2 2 3 3 4
5 4
2 2 3 3 4

输出

-1
3
3
3
4

题意:给出一个n个数的序列,我们可以删除m个数,然后我们要求出现次数最多并且最大的,

也就是如果出现次数最多的有多个,那就必须删除其他的数,避免出现次数最大的有多个,然后我们要求值最大,所以我们还要尽量判断值大的

例如  输入 7 3

    2 2 2 2 4 4 5

出现次数最多的是2,但是我们可以删去3个2然后就可以取4了,有人会问为什么不取5呢,

因为我们最多删三次,我们要使5是出现次数最多并且没有重复的,只能把其他6个数都删了,

但是次数不够,所以不行

思路:既然我们要取次数最多并且值最大的,如果我们取当前这个数的话,我们肯定出现次数相同还有重复的话,我们优先肯定是取最大的,但是我们又要把

所有次数比他多的删掉,因为取这个数就代表当前这个数的出现次数最多,但是我们不知道哪些比它多,我们直接遍历的话会超限,所以我们贪心,先用map

记录下每个数出现的次数,然后我们用迭代器遍历,按次数最多的排前,然后次数相等的把大的排后面

(因为我们是按次数从大到小排的,所以我们要把前面那些次数比当前位置多的都减成比他小,但是相同次数的时候我们取值大的,所以次数相等的时候按值的升序排)

具体看代码的注释

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
struct sss
{
ll x,y;
sss(){};
sss(ll a,ll b){x=a;y=b;};
}a[];
int cmp(struct sss x,struct sss y)
{
if(x.y==y.y)
return x.x<y.x;
return x.y>y.y;
}
int main()
{
int t;
int n,m;
map<ll,ll> mp;
scanf("%d",&t);
while(t--)
{
mp.clear();
ll x;
scanf("%d%d",&n,&m);
for(int i=;i<n;i++)//记录每个数的出现次数
{
scanf("%lld",&x);
mp[x]++;
}
int cnt=;
for(map<ll,ll>::iterator it=mp.begin();it!=mp.end();it++)//把每个数及其出现次数取出来
{
a[cnt].x=it->first;
a[cnt++].y=it->second;
}
sort(a,a+cnt,cmp);//贪心按次数从高到低,相等值升序排序
ll sum=;
ll flag=,num=;//sum记录的是前面总的出现次数
for(int i=;i<cnt;i++)
{
if(i<cnt-&&a[i].y==a[i+].y)//判断次数是否是相等的,相等的时候直接取最大的那个,(一定要加i<cnt-1,没加wa了,然后一直找错(>_<) ,,)
{
sum+=a[i].y;//累加次数
continue;
}
else{
if(flag==)//第一个直接取
{
if(sum-i*(a[i].y-)<=m)//判断是否可以删除这么多数
{
flag=;
num=a[i].x;  //num存的是答案
}
}
else{
if(a[i].x>num)  //我们贪心取答案最大的,然后我们再判断是否可以删这么多
{
if(sum-i*(a[i].y-)<=m)
{
flag=;
num=a[i].x;
}
}
}
sum+=a[i].y;
}
}
if(flag==) printf("-1\n");
else printf("%lld\n",num);
}
}

牛客多校第四场 G Maximum Mode的更多相关文章

  1. [2019牛客多校第四场][G. Tree]

    题目链接:https://ac.nowcoder.com/acm/contest/884/G 题目大意:给定一个树\(A\),再给出\(t\)次询问,问\(A\)中有多少连通子图与树\(B_i\)同构 ...

  2. 牛客多校第三场 G Removing Stones(分治+线段树)

    牛客多校第三场 G Removing Stones(分治+线段树) 题意: 给你n个数,问你有多少个长度不小于2的连续子序列,使得其中最大元素不大于所有元素和的一半 题解: 分治+线段树 线段树维护最 ...

  3. 牛客多校第四场sequence C (线段树+单调栈)

    牛客多校第四场sequence C (线段树+单调栈) 传送门:https://ac.nowcoder.com/acm/contest/884/C 题意: 求一个$\max {1 \leq l \le ...

  4. 牛客多校第四场 F Beautiful Garden

    链接:https://www.nowcoder.com/acm/contest/142/F来源:牛客网 题目描述 There's a beautiful garden whose size is n ...

  5. 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数

    目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...

  6. 2019牛客多校第四场 A meeting

    链接:https://ac.nowcoder.com/acm/contest/884/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言10485 ...

  7. 字符串dp——牛客多校第五场G

    比赛的时候脑瘫了没想出来..打多校以来最自闭的一场 显然从s中选择大于m个数组成的数必然比t大,所以只要dp求出从s中选择m个数大于t的方案数 官方题解是反着往前推,想了下反着推的确简单,因为高位的数 ...

  8. 牛客多校第四场 J.Hash Function(线段树优化建图+拓扑排序)

    题目传送门:https://www.nowcoder.com/acm/contest/142/J 题意:给一个hash table,求出字典序最小的插入序列,或者判断不合法. 分析: eg.对于序列{ ...

  9. 2019年牛客多校第四场 B题xor(线段树+线性基交)

    题目链接 传送门 题意 给你\(n\)个基底,求\([l,r]\)内的每个基底是否都能异或出\(x\). 思路 线性基交板子题,但是一直没看懂咋求,先偷一份咖啡鸡板子写篇博客吧~ 线性基交学习博客:传 ...

随机推荐

  1. 部署--云服务器(RubyChina上的转帖); 附加用cap部署sidekiq

    https://ruby-china.org/topics/36899 附加https://ruby-china.org/topics/36899 Capistrano + Rails5.2部署 使用 ...

  2. You Don't Know JS: Scope & Closures (第3章: 函数 vs 块作用域)

    第二章,作用域由一系列的bubbles组成.每一个都代表了一个container或bucket,装着被声明的identifiers(variables, functions).这些bubbles相互嵌 ...

  3. 11月26日11月26日,周日在家practice.基本了解了layouts and Rending (guides); gem font-awesome-rails的实例用法;建立路径route, member..do的实际例子

    http://fontawesome.io/examples/ content_tag(:i,"", class:"fa fa-lock fa-spin fa-lg fa ...

  4. 电影《Green book》观后感_已补全:携带着种族歧视的“光环”,艰难地获得朋友的相互依赖,依然得享受生活的酸甜苦咸。

    目录 1.电影基本情况介绍 2.故事整个发展经历 3.观影感受 4.网友评论 <Green book>--绿皮书 作者总共看这部影片三次,第一次英文版慢看,第二次中文版快看,第三次中文版总 ...

  5. HashMap的两种排序方式

    Map<String, Integer> map = new HashMap<String, Integer>();map.put("d", 2);map. ...

  6. 『TensorFlow』SSD源码学习_其五:TFR数据读取&数据预处理

    Fork版本项目地址:SSD 一.TFR数据读取 创建slim.dataset.Dataset对象 在train_ssd_network.py获取数据操作如下,首先需要slim.dataset.Dat ...

  7. js时间与时间戳互相转换

    var _time1 = Date.parse(new Date(‘2017-05-02 00:00:00’))/1000; //将设定的日期转换为时间戳 _time1 = getLocalTime( ...

  8. 动态BT跳转

    METHOD eh_onzobject_id_link. ***定义 DATA : lv_crmt_object_guid TYPE crmt_object_guid, lv_index TYPE i ...

  9. “SecureCRT遇到一个致命的错误且必须关闭”处理办法

    打开SecureCRT时报错:SecureCRT遇到一个致命的错误且发须关闭.一个崩溃转储文件已创建于... 解决办法是,如下在cmd中输入regedit回车打开注册表编缉器 展开HKEY_LOCAL ...

  10. summary_20th,Nov 2018

    一. 常量: 相对于变量,不改变的量 规定常量名全部大写(实际还是变量) 二:数值的运算符: 1. 算术运算符 +  和,    - 减,    *乘,       / 除(浮点数结果) // 取整, ...