赞
踩
某次科研调查时得到了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个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。
8 2 4 2 4 5 100 2 100
2 3 4 2 5 1 100 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;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。