2012-10-25 08:39:44Morris

[ZJ][bitset] a561. 內存不足

內容 :

Background

內存不足的情況下,請使用排序法。

The Problem

給定一個 n 小於一千萬,每個非負數字不重複且都小一千萬,求其排序後的結果。

輸入說明 :

請參考 Sample Input。

輸出說明 :

只會有一組測資,請只輸出 index 可以被 10 整除的數字即可。

意即 if(index mod 10 == 0) printf("%d", A[index]);

範例輸入 :

30
10 1 9 26 14 5 2 7 25 17 27 11 4 13 15 0 3 16 12 19 20 18 6 23 24 21 22 8 28 29 

範例輸出 :

0 10 20 

提示 :

出處 :

(管理:morris1028)




#include <stdio.h>
#define maxL (10000000>>5)+1
#define GET(x) (mark[x>>5]>>(x&31)&1)
#define SET(x) (mark[x>>5] |= 1<<(x&31))
int mark[maxL];
int main() {
    int n, i, j, x;
    scanf("%d", &n);
    for(i = 0; i < n; i++)
        scanf("%d", &x), SET(x);
    for(i = 0, j = 0; i < 10000000; i++) {
        if(GET(i)) {
            if(j == 0) printf("%d ", i);
            j++;
            if(j >= 10)  j = 0;
        }
    }
    return 0;
}