统计数字

题目描述:

某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10 9)。已知不相同的数不超过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

备注:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

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;
}

 

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄