LuoguP7259 [COCI2009-2010#3] SORT 题解
Content
请编写一个“频率排序器”。输入一个
长度为 \(n\) 的数列 \(A=\{a_1,a_2,\dots,a_n\}\),要求:
- 按照每个数的出现次数降序排列。
- 如果两个数出现次数相同,则谁在数列中出现的位置靠前,排列之后那个书的位置也是靠前的。
数据范围:\(n\in[1,10^3],1\leqslant a_i\leqslant c\leqslant10^9\)。
Solution
我们开个 \(\texttt{map}\) 数组 \(vis\) 用来记录某个数是在数列中第几个出现的(如果某个数 \(x\) 没出现则 \(vis_x=0\)),然后再开个结构体存储:
- 这个数的值。
- 这个数最先出现的位置。
- 这个数出现的次数。
边输入就边记录以上信息。但有个例外,如果这个数第一次出现,则在结构体中新开一个元素,记录当前位置为最先出现的位置,出现次数为 \(1\),数的值为当前读入的数的值。
以上信息记录完以后我们就开始排序了,首先按照数的出现次数为第一关键字降序排列,如果次数相同,再按照最先出现的位置为第二关键字排序。排序完之后就可以输出了。
Code
struct node {
int fi, ti, num;
bool operator < (const node& tmp) const {
if(ti != tmp.ti) return ti > tmp.ti;
return fi < tmp.fi;
}
}a[1007];
map<int, int> vis;
int n, c, cnt, x[1007];
int main() {
n = Rint, c = Rint;
F(i, 1, n) {
x[i] = Rint;
if(!vis[x[i]]) {
a[++cnt] = (node){i, 1, x[i]};
vis[x[i]] = cnt;
} else a[vis[x[i]]].ti++;
}
sort(a + 1, a + cnt + 1);
F(i, 1, cnt) F(j, 1, a[i].ti) printf("%d ", a[i].num);
return 0;
}
LuoguP7259 [COCI2009-2010#3] SORT 题解的更多相关文章
- codechef Turbo Sort 题解
Input t – the number of numbers in list, then t lines follow [t <= 10^6]. Each line contains one ...
- JZOJ 5409 Fantasy & NOI 2010 超级钢琴 题解
其实早在 2020-12-26 的比赛我们就做过 5409. Fantasy 这可是紫题啊 题目大意 给你一个序列,求长度在 \([L,R]\) 区间内的 \(k\) 个连续子序列的最大和 题解 如此 ...
- HDU 1425 sort 题解
选择出数列中前k个最大的数. 这里由于数据特殊.所以能够使用hash表的方法: #include <cstdio> #include <algorithm> #include ...
- Hdoj 1425.sort 题解
Problem Description 给你n个整数,请按从大到小的顺序输出其中前m大的数. Input 每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含 ...
- Insertion Sort List Leetcode java
题目: Sort a linked list using insertion sort. 题解: Insertion Sort就是把一个一个元素往已排好序的list中插入的过程. 初始时,sorted ...
- 【leetcode刷题笔记】Insertion Sort List
Sort a linked list using insertion sort. 题解:实现链表的插入排序. 要注意的地方就是,处理链表插入的时候尽量往当前游标的后面插入,而不要往前面插入,后者非常麻 ...
- 算法与数据结构基础 - 排序(Sort)
排序基础 排序方法分两大类,一类是比较排序,快速排序(Quick Sort).归并排序(Merge Sort).插入排序(Insertion Sort).选择排序(Selection Sort).希尔 ...
- 830. String Sort
830. String Sort 题解 int alpha[256] = {0};//记录字符的次数 bool cmp(char a,char b) { if(alpha[a]==alpha[b])/ ...
- 【35.39%】【hdu 3333】Turing Tree
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...
随机推荐
- SpringMVC学习笔记---依赖配置和简单案例实现
初识SpringMVC 实现步骤: 新建一个web项目 导入相关jar包 编写web.xml,注册DispatcherServlet 编写springmvc配置文件 接下来就是去创建对应的控制类 , ...
- Mike post process with Matlab toolbox
表怕,这个博客只有题目是英文的-- Matlab toolbox 安装 去DHI官网下载最新的MikeSDK2014与Matlab toolbox,下载好后安装MikeSDK2014,注意电脑上不能有 ...
- miRNA预测工具miRDeep-P2
之前讲过预测植物miRNA的一款软件miR-PREFER, 今天在介绍一款软件miRDeep-p2, 也叫miRDP2 安装 在此之前,应安装一下软件 Bowite, Bowtie2, Vienna ...
- 详解getchar()函数与缓冲区
1.首先,我们看一下这段代码: 它的简单意思就是从键盘读入一个字符,然后输出到屏幕.理所当然,我们输入1,输出就是1,输入2,输出就是2. 那么我们如果输出的是12呢? 它的输出是1. 这里我们先简单 ...
- (数据科学学习手札132)Python+Fabric实现远程服务器连接
本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 日常工作中经常需要通过SSH连接到多台远程 ...
- MySQL:事务常用语句
Mysql(版本是8)的事务隔离级别 默认是RR:REPEATABLE-READ:可重复读 查看 当前隔离级别 全局隔离级别 修改 -- 当前修改 -- 设置成可重复读 SET transactio ...
- 使用 CliWrap 让C#中的命令行交互举重若轻
在代码中进行命令行交互是一个很常见的场景, 特别是在一些CI CD 自动化流程中, 在这之前我们会使用 System.Diagnostics.Process API, 现在有一个更灵活的工具 CliW ...
- pymongdb入门
Pymongo入门 安装 pip install pymongo 连接 实际就是实例化一个客户端对象,然后客户端对象中指定一个库作为库对象,库对象中的集合对象就是之后常用来执行操作的对象 1 ''' ...
- Oracle中的null与空字符串''的区别
含义解释:问:什么是NULL?答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零.ORACLE允许任何一种数据类型的字段为空,除了以下 ...
- mystar01 nodejs MVC 公共CSS,JS设置
mystar01 nodejs MVC gulp 项目搭建 config/express.js中定义别名 //将下载的第三方库添加到静态资源路径当中,方便访问 app.use('/jquery', e ...