【排序+模拟】vijos 1816 统计数字

标签:NOIP提高组2007

 

描述

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

格式

输入格式

第1行是整数n(1<=n<=200000),表示自然数的个数。

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

输出格式

输出包含m行(m为n个自然数中不相同数的个数),按照自然数从小到大的顺序输出。每行输出两个整数,分别是自然数和该数出现的次数,其间用一个空格隔开。

样例1

样例输入1[复制]

8 

2 

4 

2 

4 

5 

100 

2 

100

样例输出1[复制]

2 3 

4 2 

5 1 

100 2 

限制

每个测试点1s。

来源

NOIP2007提高组

普及组的模拟题 这种水题都刷真的是大丈夫吗

# include<cstdio>

# include<cstring>

# include<iostream>

# include<algorithm>

using namespace std;

typedef long long LL;

const int maxn=200000+10;

LL num[maxn];

int main(){

    ios::sync_with_stdio(false);

    int n;cin>>n;

    for(int i=1;i<=n;i++)cin>>num[i];

    sort(num+1,num+n+1);

    LL cur=num[1],tot=0;

    for(int i=1;i<=n;i++){

        if(num[i]!=cur){cout<<cur<<" "<<tot<<endl;cur=num[i];tot=1;}

        else tot++;

    }

    cout<<cur<<" "<<tot<<endl;

    return 0;

}

 

你可能感兴趣的:(OS)