当前位置:   article > 正文

1830. 【提高组NOIP2007】统计数字(count.pas/c/cpp)

1830. 【提高组NOIP2007】统计数字(count.pas/c/cpp)
题目描述

某次科研调查时得到了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见祖宗。

代码
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. long long a[1000001];
  4. map<long long,int>f;
  5. int main()
  6. {
  7. freopen("count.in","r",stdin);
  8. freopen("count.out","w",stdout);
  9. int n;
  10. scanf("%d",&n);
  11. for(int i=1;i<=n;i++)
  12. {
  13. scanf("%lld",&a[i]);
  14. f[a[i]]++;
  15. }
  16. sort(a+1,a+1+n);
  17. for(int i=1;i<=n;i++)
  18. {
  19. if(f[a[i]]!=0)
  20. {
  21. printf("%lld %d\n",a[i],f[a[i]]);
  22. f[a[i]]=0;
  23. }
  24. }
  25. return 0;
  26. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/613031
推荐阅读
相关标签
  

闽ICP备14008679号