链接: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.

case:

input:

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

output:

-1
3
3
3
4

题目大意:

给N个数, 删掉M个数,使得剩下的数众数最大,求那个众数。

官方题解:

•枚举答案,考虑需要删⼏几个数才能使之变成众数

•出现次数多余它的都要被删到次数比它小

•剩下的随便便删

大概思路(本人理解):

枚举出现的次数,因为出现次数多的更有可能成为众数,所以从多到少枚举出现的次数,其次就是相同出现次数的话取最大的那个(也有可能是由比它出现多的减过来的),简单来说就是用M次删除把最大的那个众数弄出来。

不过要注意一点就是:优化输入!!!本人没有优化输入前TLE了五次,当然,这里包括了更傻的每个案例都重新定义映射和动态数组,想这样省略初始化,但是太慢了。。。还是老老实实初始化的好。(哎,都在代码里了)

AC code:

#include <map>
#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define INF 0x3f3f3f3f
#define ll long long int
using namespace std; const int MAXN = 1e5+; ll a[MAXN]; ///原序列
ll c[MAXN]; ///c[x]出现次数为 X 的最大值
ll T_case, N, K;
vector<ll> num_len[MAXN]; ///出现次数为 X 的数有多少个
map<ll, ll> mmp; ///记录出现次数 inline ll read() ///优化输入
{
register ll c = getchar(), flag = , sum = ;
while(c > '' || c < '')
{
if(c == '-') flag = -;
c = getchar();
}
while(c <= '' && c >= '')
{
sum = sum*+c-'';
c = getchar();
}
return flag*sum;
} int main()
{
scanf("%lld", &T_case);
while(T_case--)
{
N = read(); K = read();
mmp.clear();
for(ll i = ; i <= N; i++)
{
num_len[i].clear();
c[i] = ;
} for(int i = ; i <= N; i++)
{
a[i] = read();
if(mmp.count(a[i]) == ) mmp[a[i]] = ;
else mmp[a[i]]++;
} for(int i = ; i <= N; i++)
{
ll x = mmp[a[i]]; ///a[i]出现的次数
if(x)
{
num_len[x].push_back(a[i]); ///增加出现次数为 x 的元素
c[x] = max(c[x], a[i]); ///更新出现次数为 X 的最大值
mmp[a[i]] = ; ///出现次数清零,避免重复加
}
}
ll res = -; ///当前满足成为众数的最大值
ll pre = ; ///使当前的数成为众数的需要的删除次数
ll ans = -; ///答案
for(int len = N; len > ; len--) ///枚举出现次数
{
ll xx = num_len[len].size(); ///出现次数为len的数量
pre+=xx;
if(xx)
{
res = max(res, c[len]); ///当前的众数有可能由上一个众数退化而来
if(pre- <= K) ///如果剩余的删除次数满足需要删除次数的条件
{
ans=max(ans, res); ///更新答案
}
else break; ///剩余的删除次数无法满足当前长度众数的要求的,那之后的也无法满足了
}
K-=pre;
if(K<) break; ///无剩余操作次数
}
printf("%lld\n", ans);
}
return ;
}

(第四场)G Maximum Mode 【YY+暴力】的更多相关文章

  1. 牛客多校第四场 G Maximum Mode

    链接:https://www.nowcoder.com/acm/contest/142/G来源:牛客网 The mode of an integer sequence is the value tha ...

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

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

  3. 【春训团队赛第四场】补题 | MST上倍增 | LCA | DAG上最长路 | 思维 | 素数筛 | 找规律 | 计几 | 背包 | 并查集

    春训团队赛第四场 ID A B C D E F G H I J K L M AC O O O O O O O O O 补题 ? ? O O 传送门 题目链接(CF Gym102021) 题解链接(pd ...

  4. 2018 HDU多校第四场赛后补题

    2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...

  5. 牛客网NOIP赛前集训营-提高组(第四场)游记

    牛客网NOIP赛前集训营-提高组(第四场)游记 动态点分治 题目大意: \(T(t\le10000)\)组询问,求\([l,r]\)中\(k(l,r,k<2^{63})\)的非负整数次幂的数的个 ...

  6. CTF-i春秋网鼎杯第四场部分writeup

    CTF-i春秋网鼎杯第四场部分writeup 因为我们组的比赛是在第四场,所以前两次都是群里扔过来几道题然后做,也不知道什么原因第三场的题目没人发,所以就没做,昨天打了第四场,简直是被虐着打. she ...

  7. 牛客网NOIP赛前集训营-提高组(第四场)B区间

    牛客网NOIP赛前集训营-提高组(第四场)B区间 题目描述 给出一个序列$ a_1  \dots   a_n$. 定义一个区间 \([l,r]\) 是好的,当且仅当这个区间中存在一个 \(i\),使得 ...

  8. 「CSP-S模拟赛」2019第四场

    「CSP-S模拟赛」2019第四场 T1 「JOI 2014 Final」JOI 徽章 题目 考场思考(正解) T2 「JOI 2015 Final」分蛋糕 2 题目 考场思考(正解) T3 「CQO ...

  9. NOI.AC NOIP模拟赛 第四场 补记

    NOI.AC NOIP模拟赛 第四场 补记 子图 题目大意: 一张\(n(n\le5\times10^5)\)个点,\(m(m\le5\times10^5)\)条边的无向图.删去第\(i\)条边需要\ ...

  10. 牛客网暑期ACM多校训练营(第四场):A Ternary String(欧拉降幂)

    链接:牛客网暑期ACM多校训练营(第四场):A Ternary String 题意:给出一段数列 s,只包含 0.1.2 三种数.每秒在每个 2 后面会插入一个 1 ,每个 1 后面会插入一个 0,之 ...

随机推荐

  1. 关于工具类静态方法调用@Autowired注入的service类问题

    @Component //此处注解不能省却(0) 1 public class NtClient { 2 /** 3 * 日志 4 */ 5 private static String clazzNa ...

  2. stream3

    import java.util.function.Consumer; import java.util.function.IntConsumer; public class ConsumerTest ...

  3. oracle12C--DG FAR SYNC 部署(前提为搭建好12C的DG)

    <<往期12CDG搭建>> 一,理解同步异步模式 01, 使用LGWR 进程的SYNC 方式 1)Primary Database 产生的Redo 日志要同时写到日志文件和网络 ...

  4. mysql 语句执行的过程

    客户端发送一条查询给服务器: 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果.否则进入下一阶段. 服务器段进行SQL解析.预处理,在优化器生成对应的执行计划: mysql根据优化器 ...

  5. Python 递归返回树形菜单JSON串 <flask>

    需求:菜单管理功能(增.删.改),多级树形菜单展示 数据库表设计 create table if not exists Menu( id serial primary key , title ) no ...

  6. 常用shell脚本(持续更新中)

    1. 写一个shell脚本来得到当前的日期,时间,用户名和当前工作目录. 答案 : 输出用户名,当前日期和时间,以及当前工作目录的命令就是logname,date,who i am和pwd. #!/b ...

  7. C# 用tabcontrol实现窗体类似网页排版的显示

    这里做的比较简陋,可以美化下 把form设置为非顶级控件,直接放在tabcontrol里边,然后实现tabcontrol的拖拽移除tabpage显示form以及添加tabpage mousemove的 ...

  8. 从零开始的全栈工程师——利用CSS3画一个正方体 ( css3 )

    transform属性 CSS3的变形(transform)属性让元素在一个坐标系统中变形.transform属性的基本语法如下: transform:none | <transform-fun ...

  9. Vue表格中,对数据进行转换、处理

    众所周知,后端从Mysql取出的数据,一般是很难单独处理某一个Key的数据的(需要处理的话,可能会浪费大量的性能.而且对页面加载时间有很大的影响),所以,从数据库取出的数据.只能由前端进行处理.但是在 ...

  10. height百分比以及高度自适应问题

    1.  你曾经是否说想要 高度占页面或者占div百分比无效的问题,相信你也搜索过了,就是说 需要 设置父亲父亲一直到祖宗html都要设置百分比,才有效果. 总之一句话:想用百分比设置他的高度,则它的父 ...