Content

有 \(t\) 组询问,每组询问给定一个长度为 \(n\) 的数列,请将出现次数最多的数按照从小到大的顺序输出,或者这些数在数列中出现的次数都相等。

数据范围:\(t\) 未知,\(n\leqslant 10^5,a_i\leqslant 10^9\)。

Solution

算是比较小清新的排序题。

我们直接用 map 开个桶,统计每个数出现的次数,然后排序看哪些数出现的次数最多,然后将这些数再次从小到大排序后输出即可,注意特判一下所有数出现的次数都相等的情况。

Code

int t, n, cnt, a[100007];
struct node {
int id, val;
bool operator < (const node& s) const {return val > s.val;}
}kk[100007];
map<int, int> vis; void cle() {
_for(i, 1, cnt) vis[kk[i].id] = 0, kk[i].id = 0, kk[i].val = 0;
cnt = 0;
} int main() {
getint(t);
while(t--) {
cle();
getint(n);
_for(i, 1, n) {
int x;
getint(x);
if(!vis[x]) kk[++cnt].id = x, kk[cnt].val++, vis[x] = cnt;
else kk[vis[x]].val++;
}
int flagofallsame = 1;
_for(i, 2, cnt) if(kk[i].val != kk[i - 1].val) {flagofallsame = 0; break;}
if(flagofallsame) {puts("-1"); continue;}
sort(kk + 1, kk + cnt + 1);
int ans[100007] = {0}, ansnum = 0;
_for(i, 1, cnt) {if(kk[i].val == kk[1].val) ans[++ansnum] = kk[i].id; else break;}
sort(ans + 1, ans + ansnum + 1);
printf("%d\n", ansnum);
_for(i, 1, ansnum) printf("%d ", ans[i]);
puts("");
}
return 0;
}

最新文章

  1. POJ 1797 Heavy Transportation(最大生成树/最短路变形)
  2. 修改hosts文件,修改后不生效怎么办
  3. jQuery.is() 函数
  4. git资料图
  5. 服务器知识----IIS架设问题
  6. C#新开一个线程取到数据,如何更新到主线程UI上面
  7. 一个页面从输入 URL 到页面加载完的过程中都发生了什么事情?
  8. BI (商业智能)
  9. Report_报表中Ref Cursor数据源的概念和用法(案例)
  10. 纯js页面跳转整理
  11. Windows Server 2003单网卡搭建VPN
  12. 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
  13. android studio 怎样正确导入jar
  14. Python:开发Sublime插件,方便PHP开发
  15. php浏览历史记录的方法
  16. org.hibernate.MappingException
  17. celery分布式异步框架
  18. C语言的通用指针类型(void *)
  19. Python 中常见错误总结
  20. 解决sublime text 3中文乱码问题

热门文章

  1. AT4168 [ARC100C] Or Plus Max
  2. Codeforces 436E - Cardboard Box(贪心/反悔贪心/数据结构)
  3. 基因组共线性分析工具MCScanX
  4. GATK4.1 call SNP
  5. 25-ZigZag Conversion
  6. 学习java的第十三天
  7. adult
  8. EDA简介
  9. Mybatis相关知识点(二)
  10. Shell学习(五)—— awk命令详解