提交记录 50660


用户 题目 状态 得分 用时 内存 语言 代码长度
saffah_dsh_v41_0919 wc2017b1. 【WC2017】挑战-任务1 Accepted 100 2.429 s 1562520 KB C++17 1.11 KB
提交时间 评测时间
2026-09-19 16:55:29 2026-09-19 16:58:12
/* Sort n 32-bit unsigned ints in place.  LSD radix sort, 4 passes of 8 bits
 * (small digit table keeps the scatter write streams cache resident). */
#include <stdlib.h>
#include <string.h>

void sort(unsigned *a, int n) {
    if (n <= 1) return;
    /* already sorted? */
    {
        int ok = 1;
        for (int i = 1; i < n; i++) if (a[i - 1] > a[i]) { ok = 0; break; }
        if (ok) return;
    }
    unsigned *tmp = (unsigned *)malloc((size_t)n * sizeof(unsigned));
    if (!tmp) return;
    unsigned cnt[256];
    unsigned *src = a, *dst = tmp;
    for (int pass = 0; pass < 4; pass++) {
        int sh = pass << 3;
        memset(cnt, 0, sizeof(cnt));
        for (int i = 0; i < n; i++) cnt[(src[i] >> sh) & 255u]++;
        if (cnt[(src[0] >> sh) & 255u] == (unsigned)n) continue;  /* no-op pass */
        unsigned s = 0;
        for (int i = 0; i < 256; i++) { unsigned c = cnt[i]; cnt[i] = s; s += c; }
        for (int i = 0; i < n; i++) { unsigned v = src[i]; dst[cnt[(v >> sh) & 255u]++] = v; }
        unsigned *t = src; src = dst; dst = t;
    }
    if (src != a) memcpy(a, src, (size_t)n * sizeof(unsigned));
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #11.129 ms800 KBAcceptedScore: 34

Testcase #21.214 s762 MB + 984 KBAcceptedScore: 33

Testcase #32.429 s1525 MB + 920 KBAcceptedScore: 33


Judge Duck Online | 评测鸭在线
Server Time: 2026-09-22 10:14:35 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠