noip200705统计数字

试题描述:

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

输入:

包含n+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

解题思路:

hash

#include <iostream>

using namespace std;
int a[200001];
int read() //输入模板 
{
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9')
    {
        if(ch=='-') f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
    {
        x=x*10+ch-'0';
        ch=getchar();
    }
    return x*f;
}
int main()
{
    int n,i,flag=0;
    scanf("%D",&n);
    for(i=0;i<n;i++) scanf("%d",&a[i]);
    sort(a,a+n);
    for(i=0;i<n;i++)
    {
        if(a[i+1]!=a[i]) {printf("%d %d\n",a[i],i-flag+1);flag=i+1;}
    }
    return 0;
}
View Code

 

posted @ 2017-07-14 12:43  Dijkstra·Liu  阅读(283)  评论(0编辑  收藏  举报