首页 > 技术文章 > 【牛客-16643】统计数字(简单排序)

sky-stars 2019-05-30 20:20 原文

统计数字


题目描述:

某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*109)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。
输入描述:
第1行是整数n,表示自然数的个数。
第2~n+1行每行一个自然数。输出描述:输出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,每个数均不超过1500000000(1.5*10^9)

题目链接:

https://ac.nowcoder.com/acm/problem/16643(先注册)

一开始想着用a[10005]存自然数,b[a[i]]存每个自然数的个数,但是总是不能通过,就换成map<ll,ll>了

AC代码

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <numeric>
const int INF=0x3f3f3f;//无穷大
using namespace std;
typedef long long ll;
map<ll, ll>num;
int main()
{
    ll n;
    cin >>n;
    while(n--)
    {
        ll x;
        cin >>x;
        num[x]++;
    }
    for(map<ll,ll>::iterator it=num.begin(); it!=num.end(); it++)//遍历map
        cout<<it->first<< " " <<it->second << endl;
    return 0;
}

 

 

推荐阅读