提交记录 20684


用户 题目 状态 得分 用时 内存 语言 代码长度
TSKY 1001. 测测你的排序 Wrong Answer 0 1.555 s 781296 KB C++14 1.58 KB
提交时间 评测时间
2023-12-01 22:36:43 2023-12-01 22:36:49
#include<cstdint>
#include<algorithm>
template <typename Iter>
void radix_sort_u32x11(Iter begin, Iter end)
{
    using Ty = decltype(+begin[0]);
    using LenTy = uint32_t;
    //static_assert(std::is_same<Ty, uint32_t>::value, "Must be uint32 ary");
    constexpr int RADIX_LEN = 11;
    constexpr int segments = (sizeof(Ty) * 8 + RADIX_LEN - 1) / RADIX_LEN;
    constexpr Ty RADIX = Ty(1) << RADIX_LEN;
    LenTy len = end - begin;
    end = begin + len;
    LenTy prefix[segments][RADIX] = {};
    auto tmp = new Ty[len];
    // static Ty tmp[size_t(1e8)];
    for (auto it = begin; it < end; it++)
    {
        Ty n = *it;
        prefix[0][n % RADIX]++;
        prefix[1][(n >> RADIX_LEN) % RADIX]++;
        prefix[2][n >> RADIX_LEN * 2]++;
    }
    for (int j = 0; j < segments; j++)
    {
        Ty pre = 0, last = prefix[j][0];
        prefix[j][0] = 0;
        for (std::size_t i = 1; i < RADIX; i++)
        {
            pre = prefix[j][i];
            prefix[j][i] = prefix[j][i - 1] + last;
            last = pre;
        }
    }
    auto it_org = &begin[0], it_dst = &tmp[0];
    for (int seg = 0; seg < segments; seg++)
    {
        const int shift = seg * RADIX_LEN;
        auto org_end = it_org + len;
        for (auto it = it_org; it < org_end; it++)
        {
            Ty org = *it;
            LenTy rem = (org >> shift) % RADIX;
            LenTy indx = prefix[seg][rem];
            it_dst[indx] = org;
            prefix[seg][rem] = indx + 1;
        }
        std::swap(it_org, it_dst);
    }
    delete[] tmp;
}

void sort(unsigned *a, int n) {
    radix_sort_u32x11(a,a+n);
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #11.555 s762 MB + 1008 KBWrong AnswerScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2025-07-24 09:16:26 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠