提交记录 5588


用户 题目 状态 得分 用时 内存 语言 代码长度
caesar 1001. 测测你的排序 Accepted 100 799.251 ms 781268 KB C++11 1.36 KB
提交时间 评测时间
2018-08-30 14:58:53 2020-08-01 00:19:48
#if defined(__GNUC__) && !defined(__clang__)
#define O2 __attribute__((optimize("-O2")))
#else
#define O2
#endif

#include <stdio.h>
#include <stdlib.h>
#define BUCKET_MOD (0xFFU)
#define BUCKET_SIZE (BUCKET_MOD + 1U)

typedef unsigned sort_t;

O2 void sort(sort_t *data, int n) {
    unsigned int i;
    unsigned int k1[BUCKET_SIZE] = {0}, k2[BUCKET_SIZE] = {0}, k3[BUCKET_SIZE] = {0}, k4[BUCKET_SIZE] = {0};
    sort_t *arr = (sort_t*)malloc(sizeof(data[0]) * n), *p;
    for (p = data + n; p > data; ) {
        register sort_t tmp = *(--p);
        ++k4[tmp & BUCKET_MOD];
        ++k3[(tmp >> 8) & BUCKET_MOD];
        ++k2[(tmp >> 16) & BUCKET_MOD];
        ++k1[(tmp >> 24) & BUCKET_MOD];
    }
    for (i = 1; i < BUCKET_SIZE; ++i) {
        k4[i] += k4[i - 1];
        k3[i] += k3[i - 1];
        k2[i] += k2[i - 1];
        k1[i] += k1[i - 1];
    }
    for (p = data + n; p > data; ) {
        register sort_t tmp = *(--p);
        arr[--k4[tmp & BUCKET_MOD]] = tmp;
    }
    for (p = arr + n; p > arr; ) {
        register sort_t tmp = *(--p);
        data[--k3[(tmp >> 8) & BUCKET_MOD]] = tmp;
    }
    for (p = data + n; p > data; ) {
        register sort_t tmp = *(--p);
        arr[--k2[(tmp >> 16) & BUCKET_MOD]] = tmp;
    }
    for (p = arr + n; p > arr; ) {
        register sort_t tmp = *(--p);
        data[--k1[(tmp >> 24) & BUCKET_MOD]] = tmp;
    }
    free(arr);
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #1799.251 ms762 MB + 980 KBAcceptedScore: 100


Judge Duck Online | 评测鸭在线
Server Time: 2026-04-11 15:27:55 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠