(原)2018牛课多校第4场--G
/* 按值从大到小排序,记录下相应出现的次数并去重
枚举:从大到小枚举,如果能够通过删除其他数让当前这个数成为众数,则循环结束,输出此数,如果循环结束也没答案,输出-1
优先级:值优先 举例:
5 0
3 3 3 5 5
众数为3,且唯一,输出3
5 1
3 3 3 5 5
如果删除3,则3和5都出现两次,众数不唯一,如果删除5,众数为3,故当删除5时可以找到答案为3,故输出3
5 2
3 3 3 5 5
删除两个3后,众数为5,如果删除两个5,众数为3,但5>3,故要第一个操作,输出5 */
#include<iostream>
#include<cstdio>
#include<map>
#include<algorithm>
using namespace std;
const int maxn=1e5+; //a[] : 存储输入时的原数据
//v[] : a[]去重后保存在v[]中
//mymap : 用于记录某value出现的次数
int a[maxn];
int v[maxn];
map<int ,int >mymap; bool cmp(int a,int b)
{
return a>b;
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
mymap.clear();
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
scanf("%d",a+i); //按值从大到小排序
sort(a+,a+n+,cmp); //去重操作,并在map中记录下value对应的次数
int index=;
for(int i=;i<=n;i++)
{
if(i == )
v[++index]=a[i];
else if(a[i] != v[index])
v[++index]=a[i];
if(!mymap.count(a[i]))
mymap[a[i]]=;
mymap[a[i]]++;
} //从最大值开始枚举
int res=-;
for(int i=;i<=index;i++)
{
int s=;
for(int j=;j<=index;j++)
{
if(i != j && mymap[v[j]] >= mymap[v[i]])
s += mymap[v[j]]-mymap[v[i]]+;
}
//如果 s <= m
//说明可以通过删除其他数使当前数成为众数,且值最大
//跳出循环
if(s <= m)
{
res=v[i];
break;
}
}
printf("%d\n",res);
}
return ;
}
dalao代码
#include<bits/stdc++.h>
using namespace std;
map<int,int> mp;
vector<pair<int,int> > v;
int n, m;
int cmp(pair<int,int> a,pair<int,int> b)
{
if(a.first != b.first)
return a.first > b.first;
else
return a.second > b.second;
} int main()
{
ios::sync_with_stdio(false);
cin.tie();
cout.tie(); int t;
cin >> t;
while(t --)
{
mp.clear();
v.clear();
cin >> n >>m;
int k;
for(int i = ;i <= n;i ++)
{
cin >> k;
mp[k] ++;
} for(map<int,int>:: iterator it = mp.begin();it != mp.end();it ++)
{
pair<int,int> p(it->first,it->second);
v.push_back(p);
}
sort(v.begin(),v.end(),cmp); //pair fir表示数字 sec表示个数
int res = -;
for(int i = ;i < v.size();i ++)
{
int s = , t = v[i].first;
for(int j = ;j < v.size();j ++)
{
if(j == i) continue;
else if(j < i && v[j].second >= v[i].second) s += v[j].second - v[i].second + ;
else
{
if(v[j].second > v[i].second) s += v[j].second - v[i].second + ;
else if(v[j].second == v[i].second) s ++;
}
}
if(s <= m)
{
res = t;
break;
}
}
cout << res << endl;
}
return ;
}
(原)2018牛课多校第4场--G的更多相关文章
- 2018牛客多校第六场 G.Pikachu
题意: 给出一棵n个点的树,每条边有边权.对这个树加边变成一个完全图.新加的边的权值为边上两点在树上的距离.求完全图上任意两点的最大流之和. 题解: 一共有C(n,2)个点对.假设当前求s到t之间的最 ...
- 牛客多校第三场 G Removing Stones(分治+线段树)
牛客多校第三场 G Removing Stones(分治+线段树) 题意: 给你n个数,问你有多少个长度不小于2的连续子序列,使得其中最大元素不大于所有元素和的一半 题解: 分治+线段树 线段树维护最 ...
- 2018牛客多校第六场 I.Team Rocket
题意: 给出n个区间和m个点(点按顺序给出且强制在线).每个区间只会被第一个他包含的点摧毁.问每个点能摧毁多少个区间以及每个区间是被哪个点摧毁的. 题解: 将n个区间按照左端点排序,然后用vector ...
- 2018牛客多校第五场 H.subseq
题意: 给出a数组的排列.求出字典序第k小的b数组的排列,满足1<=bi<=n,bi<bi+1,a[b[i]]<a[b[i+1]],m>0. 题解: 用树状数组倒着求出以 ...
- 2018牛客多校第五场 E.room
题意: 一共有n个宿舍,每个宿舍有4个人.给出第一年的人员分布和第二年的人员分布,问至少有多少人需要移动. 题解: 对于第一年的每个宿舍,向今年的每种组合连边.流量为1,费用为(4 - 组合中已在该宿 ...
- 2018牛客多校第四场 J.Hash Function
题意: 给出一个已知的哈希表.求字典序最小的插入序列,哈希表不合法则输出-1. 题解: 对于哈希表的每一个不为-1的数,假如他的位置是t,令s = a[t]%n.则这个数可以被插入当且仅当第s ~ t ...
- 2018牛客多校第三场 C.Shuffle Cards
题意: 给出一段序列,每次将从第p个数开始的s个数移到最前面.求最终的序列是什么. 题解: Splay翻转模板题.存下板子. #include <bits/stdc++.h> using ...
- 牛客多校第四场 G Maximum Mode
链接:https://www.nowcoder.com/acm/contest/142/G来源:牛客网 The mode of an integer sequence is the value tha ...
- 字符串dp——牛客多校第五场G
比赛的时候脑瘫了没想出来..打多校以来最自闭的一场 显然从s中选择大于m个数组成的数必然比t大,所以只要dp求出从s中选择m个数大于t的方案数 官方题解是反着往前推,想了下反着推的确简单,因为高位的数 ...
随机推荐
- #个人作业Week2——结对编程对象代码复审
General 代码能够正确运行,能够正确生成指定数量的题目和答案,并且能够对给出的题目和答案文件进行比对,输出结果. 代码没有非常复杂的逻辑,比较容易理解,但是在缺少注释的情况下有部分代码需要较长时 ...
- #个人博客作业Week2——关于代码规范的讨论
<1> 这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 反驳:官僚制度在一定程度下维持了社会的和谐稳定,一个没有法律.没有拥有完善的管理体制.完全崇尚 ...
- LINUX第三次实践:程序破解
LINUX第三次实践:程序破解 标签(空格分隔): 20135328陈都 一.掌握NOP.JNE.JE.JMP.CMP汇编指令的机器码 NOP:NOP指令即"空指令".执行到NOP ...
- mybatis逆向工程生成example的问题
如果不想生成example,在 targetRuntime="MyBatis3" 处修改为 targetRuntime="MyBatis3Simple" & ...
- 使用phpstudy创建本地虚拟主机
在使用php开发网站的时候,每次测试自己的网站时,通常都是用localhost/dirname/filename.php来访问自己所写的程序 但是有时候我们需要模拟真实的场景,如通过域名访问时,如果你 ...
- linux shell $ 特殊变量
$0 #Shell本身的文件名 $1-$n #添加到Shell的各参数值.$1是第1参数.$2是第2参数… $* #所有参数列表.如"$*"用「"」括起来的情 ...
- oracle小知识点
一 . procedure和function: procedure和function在语法上几乎完全一样,使用上却有小小的差别, procedure可以单独的调用 在命令行直接exec pro_xxx ...
- Java之"instanceof"和"isInstance"代码举例
源码: /** * @Date:2018-04-20 * @Description:判断Instance * - instanceof方法返回一个boolean类型的值,意在告诉我们对象是不是某个特定 ...
- python之tkinter使用-单级菜单
# 菜单功能说明:单级菜单 import tkinter as tk root = tk.Tk() root.title('菜单选择') root.geometry('200x60') # 设置窗口大 ...
- anaconda2安装cv2
http://m.blog.csdn.net/u010167269/article/details/62447648 下载离线安装包:https://anaconda.org/menpo/opencv ...