传送门

 /*

 按值从大到小排序,记录下相应出现的次数并去重
枚举:从大到小枚举,如果能够通过删除其他数让当前这个数成为众数,则循环结束,输出此数,如果循环结束也没答案,输出-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的更多相关文章

  1. 2018牛客多校第六场 G.Pikachu

    题意: 给出一棵n个点的树,每条边有边权.对这个树加边变成一个完全图.新加的边的权值为边上两点在树上的距离.求完全图上任意两点的最大流之和. 题解: 一共有C(n,2)个点对.假设当前求s到t之间的最 ...

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

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

  3. 2018牛客多校第六场 I.Team Rocket

    题意: 给出n个区间和m个点(点按顺序给出且强制在线).每个区间只会被第一个他包含的点摧毁.问每个点能摧毁多少个区间以及每个区间是被哪个点摧毁的. 题解: 将n个区间按照左端点排序,然后用vector ...

  4. 2018牛客多校第五场 H.subseq

    题意: 给出a数组的排列.求出字典序第k小的b数组的排列,满足1<=bi<=n,bi<bi+1,a[b[i]]<a[b[i+1]],m>0. 题解: 用树状数组倒着求出以 ...

  5. 2018牛客多校第五场 E.room

    题意: 一共有n个宿舍,每个宿舍有4个人.给出第一年的人员分布和第二年的人员分布,问至少有多少人需要移动. 题解: 对于第一年的每个宿舍,向今年的每种组合连边.流量为1,费用为(4 - 组合中已在该宿 ...

  6. 2018牛客多校第四场 J.Hash Function

    题意: 给出一个已知的哈希表.求字典序最小的插入序列,哈希表不合法则输出-1. 题解: 对于哈希表的每一个不为-1的数,假如他的位置是t,令s = a[t]%n.则这个数可以被插入当且仅当第s ~ t ...

  7. 2018牛客多校第三场 C.Shuffle Cards

    题意: 给出一段序列,每次将从第p个数开始的s个数移到最前面.求最终的序列是什么. 题解: Splay翻转模板题.存下板子. #include <bits/stdc++.h> using ...

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

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

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

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

随机推荐

  1. PHP中报500错误时如何查看错误信息

    在执行代码中加入下面两行代码即可 ini_set("display_errors","On"); error_reporting(E_ALL);

  2. octave基本指令4

    octave基本指令4 图形化显示数据 >> t=[0:0.01:0.98]; >> y1 = sin(2*pi*4*t); %pi表示π >> plot(t,y1 ...

  3. PAT L3-008 喊山

    https://pintia.cn/problem-sets/994805046380707840/problems/994805050709229568 喊山,是人双手围在嘴边成喇叭状,对着远方高山 ...

  4. PAT 1016 部分A+B

    https://pintia.cn/problem-sets/994805260223102976/problems/994805306310115328 正整数A的“D~A~(为1位整数)部分”定义 ...

  5. postman发送json格式的post请求

    在地址栏里输入请求url:http://127.0.0.1:8081/getmoney 选择“POST”方式, 在“headers”添加key:Content-Type  , value:applic ...

  6. Angular生成二维码

    Installation - Angular 5+, Ionic NPM npm install angularx-qrcode --save Yarn yarn add angularx-qrcod ...

  7. 买了本Delphi面向对象编程思想,正在看,产生些问题。

    1:第33页说,Delphi通过调用类的一个构造函数来建立一个对象的实例,对象至少有一个create()的构造函数,使用时候写MyObject:=TmyObject.create即可.   但是第37 ...

  8. Python——反射

    反射的定义:使用字符串类型的名字 去操作变量 hasattr 函数 与getatter配合使用,用来判断变量是否存在 if hasatter(my,'a'):#如果为真执行 getatter(my,' ...

  9. pyhon列表去重方法总结

    开发中对数组.列表去重是非常常见的需求,对一个list中的id进行去重,有下面几种方法,前面两种方法不能保证顺序, 后面两种方法可以保持原来的顺序. 下面的代码都在Python3下测试通过, Pyth ...

  10. BZOJ2212 POI2011Tree Rotations(线段树合并)

    显然子树内的操作不会对子树外产生影响.于是贪心,若交换之后子树内逆序对减少就交换. 这个东西可以用权值线段树计算.操作完毕后需要对两棵权值线段树合并,这个的复杂度是两棵线段树的重复节点个数.那么总复杂 ...