洛谷:P7072:直播获奖


洛谷:P7072:直播获奖

Table of Contents

题目

P7072:直播获奖

分析

本题难度适中,核心在于应用一种高效且实用的排序方法——计数排序,或者说是计数排序的变体。

在本题中,我们假设每个桶只存放一个数值。也就是说,输入数据会被分配到对应的桶中,每个桶最多只会有一个元素,因此桶内无需再排序。最后只需按照桶的顺序依次输出非空桶中的元素。这种方法特别适用于数据范围较小且分布较为均匀的场景。

    for (int i = 1; i <= n; ++i)
    {
        int tmp;
        cin >> tmp;
        counting[tmp]++;  // 木桶计数,记录每个分数的数量
        // ...
    }

另一个关键点,是根据当前输入的数量,动态计算出前w%的数量。在程序实现中,这一过程通过如下内循环完成:

int total=0;
for (int j = MAX; j >= 0; --j) {
    total += counting[j];
    if (total >= max(1, i * w / 100)) {
        cout << j << " ";
        break;
    }
}

答案

Solution

思考

这是一道非常典型且实用的计数排序应用题,值得深入体会其思想和实现方式。

Previous Next