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

输入描述:

  1. 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.

输出描述:

  1. 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:

  1. #include <map>
  2. #include <vector>
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <iostream>
  6. #include <algorithm>
  7. #define INF 0x3f3f3f3f
  8. #define ll long long int
  9. using namespace std;
  10.  
  11. const int MAXN = 1e5+;
  12.  
  13. ll a[MAXN]; ///原序列
  14. ll c[MAXN]; ///c[x]出现次数为 X 的最大值
  15. ll T_case, N, K;
  16. vector<ll> num_len[MAXN]; ///出现次数为 X 的数有多少个
  17. map<ll, ll> mmp; ///记录出现次数
  18.  
  19. inline ll read() ///优化输入
  20. {
  21. register ll c = getchar(), flag = , sum = ;
  22. while(c > '' || c < '')
  23. {
  24. if(c == '-') flag = -;
  25. c = getchar();
  26. }
  27. while(c <= '' && c >= '')
  28. {
  29. sum = sum*+c-'';
  30. c = getchar();
  31. }
  32. return flag*sum;
  33. }
  34.  
  35. int main()
  36. {
  37. scanf("%lld", &T_case);
  38. while(T_case--)
  39. {
  40. N = read(); K = read();
  41. mmp.clear();
  42. for(ll i = ; i <= N; i++)
  43. {
  44. num_len[i].clear();
  45. c[i] = ;
  46. }
  47.  
  48. for(int i = ; i <= N; i++)
  49. {
  50. a[i] = read();
  51. if(mmp.count(a[i]) == ) mmp[a[i]] = ;
  52. else mmp[a[i]]++;
  53. }
  54.  
  55. for(int i = ; i <= N; i++)
  56. {
  57. ll x = mmp[a[i]]; ///a[i]出现的次数
  58. if(x)
  59. {
  60. num_len[x].push_back(a[i]); ///增加出现次数为 x 的元素
  61. c[x] = max(c[x], a[i]); ///更新出现次数为 X 的最大值
  62. mmp[a[i]] = ; ///出现次数清零,避免重复加
  63. }
  64. }
  65. ll res = -; ///当前满足成为众数的最大值
  66. ll pre = ; ///使当前的数成为众数的需要的删除次数
  67. ll ans = -; ///答案
  68. for(int len = N; len > ; len--) ///枚举出现次数
  69. {
  70. ll xx = num_len[len].size(); ///出现次数为len的数量
  71. pre+=xx;
  72. if(xx)
  73. {
  74. res = max(res, c[len]); ///当前的众数有可能由上一个众数退化而来
  75. if(pre- <= K) ///如果剩余的删除次数满足需要删除次数的条件
  76. {
  77. ans=max(ans, res); ///更新答案
  78. }
  79. else break; ///剩余的删除次数无法满足当前长度众数的要求的,那之后的也无法满足了
  80. }
  81. K-=pre;
  82. if(K<) break; ///无剩余操作次数
  83. }
  84. printf("%lld\n", ans);
  85. }
  86. return ;
  87. }

(第四场)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. Qt客户端阿里云服上传文件

    整体原理: 阿里云提供了c程序上传文件到阿里云服务器的sdk工具包,将这个工具包继承在自己的客户端,调用接口即可实现上传文件. 前期准备: 1.阿里云c程序客户端的sdk,下载地址:https://h ...

  2. spring利用cors处理跨域问题

    参考 http://blog.csdn.net/isea533/article/details/50449907 写的很全面 http://blog.csdn.net/a317560315/artic ...

  3. python 管理多版本之pyenv

    一, [root@management ~]# pyenv install -listAvailable versions:  3.3.0  3.3.1  3.3.2  3.3.3  3.3.4  3 ...

  4. Apache Beam中的函数式编程理念

    不多说,直接上干货! Apache Beam中的函数式编程理念 Apache Beam的编程范式借鉴了函数式编程的概念,从工程和实现角度向命令式妥协. 编程的领域里有三大流派:函数式.命令式.逻辑式. ...

  5. TOJ 2939 解救小Q

    描述 小Q被邪恶的大魔王困在了迷宫里,love8909决定去解救她.迷宫里面有一些陷阱,一旦走到陷阱里,就会被困身亡:(,迷宫里还有一些古老的传送阵,一旦走到传送阵上,会强制被传送到传送阵的另一头. ...

  6. Nginx启动关闭和重启、文档直接下载不阅览

    nginx启动相关 启动:sbin/nginx -c conf/nginx.conf 关闭:sbin/nginx -s stop 重启(重新加载配置文件):sbin/nginx -s reload 检 ...

  7. 将 flask 中的 session 存储到 SQLite 数据库中

    将 flask 中的 session 存储到 SQLite 数据库中 使用 flask 构建服务器后端时,常需要在浏览器端存储 cookie 用于识别不同用户,根据不同的 cookie 判断出当前请求 ...

  8. linux下(ubuntu)反删除(误删恢复)与回收站制作

    刚刚有个小伙伴不小心删了他写了好几的天代码,为他心疼之余帮他找回了文件. 想到我之前也常常误删一些文件,就干脆分享一下我的反删除方法,并说说我做的回收站(好low的,求大神指点) 首先是反删除软件ex ...

  9. C# 读写xml、excel、word、ppt、access

    C# 读写xml.excel.word.access 这里只是起个头,不做深入展开,方便以后用到参考 读写xml,主要使用.net  的xml下的document using System;using ...

  10. cf1072D. Minimum path(BFS)

    题意 题目链接 给出一个\(n \times n\)的矩阵,允许修改\(k\)次,求一条从\((1, 1)\)到\((n, n)\)的路径.要求字典序最小 Sol 很显然的一个思路是对于每个点,预处理 ...