天天看點

數次統計 NOJ 1601

                                                                                                                                      數次統計 時間限制(普通/Java) :  1000 MS/ 3000 MS          運作記憶體限制 : 65536 KByte

總送出 : 603            測試通過 : 89 

題目描述

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

輸入

多組輸入資料

    每組資料包含n+1行:

    第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

提示

資料滿足:1<=n<=200000,每個數均不超過1 500 000 000(1.5*109)

題目來源

Yang Meng

做題感受:==剛開始自己想開大數組==,發現失敗,後來轉戰結構體,定過兩個變量,一個用來存儲值,一個用來存個數。後來發現輸出很難控制,失敗==,看了OJ上的讨論版,改成map,發現TL,轉戰網際網路解題方法,稍微改了一下。

實作代碼:

#include <stdio.h>
#include <stdlib.h>
int n;
int a[200000+1];
int cmp(const void *a,const void *b){
    return *(int *)a-*(int *)b;
}
int main(){
   // freopen("count.in","r",stdin);
   // freopen("count.out","w",stdout);
    while(scanf("%d",&n)==1){
    for (int i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }
    qsort(a+1,n,sizeof(int),cmp);
    int cnt=0,s=0;
    for (int i=1;i<=n;i++){
        if (i==1){
                  s=a[i];
                  cnt++;
                  continue;
        }
        if (s!=a[i]){
                     printf("%d %d\n",s,cnt);
                     s=a[i];
                     cnt=1;
        }
        else if (s==a[i]) cnt++;
    }
    printf("%d %d\n",s,cnt);
    }
    return 0;
}
           

數次統計

時間限制(普通/Java) :  1000 MS/ 3000 MS          運作記憶體限制 : 65536 KByte

總送出 : 603            測試通過 : 89 

題目描述

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

輸入

多組輸入資料

    每組資料包含n+1行:

    第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

提示

資料滿足:1<=n<=200000,每個數均不超過1 500 000 000(1.5*109)

題目來源

Yang Meng