先介绍一下题目

题目背景

#警告:数据可能存在加强

题目描述

某次科研调查时得到了nnn个自然数,每个数均不超过1500000000(1.5×109)1500000000(1.5 \times 10^9)1500000000(1.5×109)。已知不相同的数不超过100001000010000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。

输入格式

共n+1n+1n+1行。

第一行是整数nnn,表示自然数的个数;

第222至n+1n+1n+1每行一个自然数。

输出格式

共mmm行(mmm为nnn个自然数中不相同数的个数),按照自然数从小到大的顺序输出。

每行输出222个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。

输入输出样例

输入 #1

8
2
4
2
4
5
100
2
100

输出 #1

2 3
4 2
5 1
100 2

你们以为我会用桶排,快排,排序,你们以为我在王境,错,我在帝境(我才不会告诉你我是因为桶排崩了才用的map)

注意题目背景,数据可能会加强,而且本蒟蒻就吃了数据太小的亏了,但本蒟蒻在STL库里发现了两个好东西,map和set,有了map,妈妈再也不用担心我RE了,set里会自动去重和排序,非常适合这道题

代码如下:

#include<bits/stdc++.h>

using namespace std;

int main(){
	int n,k,s = 1;
	set<int>z;
	map<int,int>p; //把他当数组用就行了
	cin >> n;
	int q;
	for(int i = 0;i < n;i ++){
		cin >> q;
		p[q] ++;
		z.insert(q);
	}
	for(set<int>::iterator it=z.begin(); it!=z.end(); it++) {
		cout << *it << " " << p[*it] << endl;
	}
}

妈妈再也不用担心我不会去重了,再也不会担心我不会排序了

妈妈再也不用担心我会RE了

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐