1. 程式人生 > >統計數字

統計數字

統計 clu show 提示 自然 http esp clas ++

鏈接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1239


時間限制: 1000 ms 內存限制: 65536 KB

【題目描述】

某次科研調查時得到了n個自然數,每個數均不超過1500000000(1.5*10^9)。已知不相同的數不超過10000個,現在需要統計這些自然數各自出現的次數,並按照自然數從小到大的順序輸出統計結果。

【輸入】

第一行是整數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,每個數均不超過1500 000 000(1.5*10^9)。

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int a[200005],t[200005];
void msort(int l,int r)
{
    if(l==r)return
; int mid=(l+r)/2; msort(l,mid); msort(mid+1,r); int i=l,j=mid+1,m=l; while(i<=mid&&j<=r) { if(a[i]>a[j])t[m++]=a[j++]; else t[m++]=a[i++]; } while(i<=mid)t[m++]=a[i++]; while(j<=r)t[m++]=a[j++]; for(int i=l;i<=r;i++)a[i]=t[i]; }
int main() { int n,flag=1; cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; msort(1,n); int k=a[1],cnt=0; for(int i=1;i<=n;i++) { if(a[i]==k)cnt++; else { cout<<k<<" "<<cnt<<endl; k=a[i]; cnt=1; } } cout<<a[n]<<" "<<cnt<<endl; return 0; }

統計數字