zoukankan      html  css  js  c++  java
  • NOIP2007 统计数字

    1.统计数字

    (count.pas/c/cpp)

    【问题描述】

    某次科研调查时得到了 n 个自然数,每个数均不超过 1500000000(1.5*109)。已知不相同的数

    不超过 10000 个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。

    【输入】

        输入文件count.in包含 n+1 行:     第 1 行是整数 n,表示自然数的个数。

        第 2~n+1 行每行一个自然数

    【输出】     输出文件count.out包含 m 行(m n 个自然数中不相同数的个数),按照自然数从小到大

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

    【输入输出样例】

    count.in

    count.out

    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*109

    【思路】

      Hash+排序。

      利用C++STL中的map映射出现次数,用set加入出现的数字,set自动排序。

    【代码】

     1 #include<iostream>
     2 #include<set>
     3 #include<map>
     4 //map映射次数 set记录出现的数 
     5 //注意数据long long 
     6 using namespace std;
     7 typedef long long LL;
     8 
     9 int main() {
    10     ios::sync_with_stdio(false);
    11     set<LL> S;
    12     map<LL ,int> cnt;
    13     int n; cin>>n;
    14     
    15     LL x;
    16     for(int i=0;i<n;i++) {
    17         cin>>x;
    18         if(!cnt.count(x)) {
    19           cnt[x]=1; S.insert(x);
    20         }
    21         else cnt[x]++;
    22     }
    23     set<LL> ::iterator it;
    24     it=S.begin();
    25     while(it!=S.end()) {
    26         cout<<*it<<" "<<cnt[*it]<<"
    ";
    27         it++;
    28     }
    29     return 0;
    30 }
  • 相关阅读:
    uoj35 后缀排序
    bzoj1026windy数
    poj2761 feed the dog
    codevs2875RY哥查字典
    bzoj1683[Usaco2005 Nov]City skyline 城市地平线
    codevs2464超级麻将
    初赛乱记
    让NOI Linux变得可用
    [HAOI2015] 按位或
    一句话CF
  • 原文地址:https://www.cnblogs.com/lidaxin/p/4859439.html
Copyright © 2011-2022 走看看