noip2007 统计数字

题目描述

某次科研调查时得到了 nn 个自然数,每个数均不超过 1500000000(1.5 \times 10^9)1500000000(1.5×109) 。已知不相同的数不超过 1000010000 个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。

输入输出格式

输入格式:

共 n+1n+1 行。

第一行是整数 nn ,表示自然数的个数;

第 22 至 n+1n+1 每行一个自然数。

输出格式:

共 mm 行( mm 为 nn 个自然数中不相同数的个数),按照自然数从小到大的顺序输出。

每行输出 2

2 个整数,分别是自然数和该数出现的次数,其间用一个空格隔开


输入输出样例

输入样例#1:  复制
8
2
4
2
4
5
100
2
100

输出样例#1:  复制
2 3
4 2
5 1
100 2












说明

40\%40% 的数据满足: 1 \le n \le 10001n1000

80\%80% 的数据满足: 1 \le n \le 500001n50000

100\%100% 的数据满足: 1 \le n \le 2000001n200000 ,每个数均不超过 1500 000 000(1.5 \times 109)1500000000(1.5×109)

我的思路是先排序,然后再统计

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN=200000;
long long num[MAXN],temp[MAXN];
int tot[MAXN];
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1; i<=n; i++)
        scanf("%lld",&num[i]);

    sort(num+1,num+1+n);
    
    int idx=1;

    for(int i=1; i<=n; i++)
    {
        if(num[i]!=num[i+1])
        tot[idx]++,idx++; 
        else
        tot[idx]++;
    }
    int sum=0;
    for(int i=1;i<idx;i++){
        sum+=tot[i];
        cout<<num[sum]<<" "<<tot[i]<<endl;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41734244/article/details/80526701
今日推荐