题目描述
某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
输入
从文件 count.in
中读入数据。
输入文件count.in包含n+1行:
第1行是整数n,表示自然数的个数。
第2~n+1行每行一个自然数。
输出
输出到文件 count.out
中。
输出文件count.out包含m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。
样例输入
8242451002100
样例输出
2 34 25 1100 2
数据范围限制
【限制】
40%的数据满足:1<=n<=1000
80%的数据满足:1<=n<=50000
100%的数据满足:1<=n<=200000,每个数均不超过1 500 000 000(1.5*10^9)
思路
由于数据太大,无法用数组存储,所以要用到STL容器。
这里我用的是map。
注意:不开long long见祖宗。
代码
#include <bits/stdc++.h>
using namespace std;
long long a[1000001];
map<long long,int>f;
int main()
{freopen("count.in","r",stdin);freopen("count.out","w",stdout);int n;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%lld",&a[i]);f[a[i]]++;}sort(a+1,a+1+n);for(int i=1;i<=n;i++){if(f[a[i]]!=0){printf("%lld %d\n",a[i],f[a[i]]);f[a[i]]=0;}}return 0;
}