题面
题目描述
某次科研调查时得到了 n n n 个自然数,每个数均不超过 1.5 × 1 0 9 1.5 \times 10^9 1.5×109 。已知不相同的数不超过 1 0 4 10^4 104 个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
输入
每组输入数据包含 n + 1 n+1 n+1 行;
第一行是整数 n n n ,表示自然数的个数;
第 2 2 2 ~ n + 1 n+1 n+1 行,每行一个自然数。
输出
输出包含 m m m 行( m m m 为 n n n 个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。
样例输入
8
2
4
2
4
5
100
2
100
样例输出
2 3
4 2
5 1
100 2
提示
1 ≤ n ≤ 2 6 1 \le n \le 2^6 1≤n≤26 ,每个数均不超过 1.5 × 1 0 9 1.5 \times 10^9 1.5×109
思路
本来以为要用堆排序,因为没法用桶。
后来想了想,其实 sort 也能解决,只需要判断一下关系就可以统计相同数字的数量了。
代码如下。
AC代码
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
ll a[200001],n,t=1;int main()
{scanf("%lld",&n);for(ll i=1;i<=n;++i)scanf("%lld",a+i);sort(a+1,a+n+1);for(ll i=2;i<=n;++i){if(a[i]==a[i-1]) t++;else printf("%lld %lld\n",a[i-1],t),t=1;}printf("%lld %lld\n",a[n],t),t=1;return 0;
}