1 条题解

  • 0
    @ 2025-7-4 14:33:46

    直接每次 sort,65 分

    #include <bits/stdc++.h>
    using namespace std;
    int n, w;
    int a[100000 + 5];
    bool cmp(int a, int b)
    {
        return a > b;
    }
    int main()
    {
        cin >> n >> w;
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        for (int i = 1; i <= n; i++)
        {
            // 前 i 个人排序
            sort(a + 1, a + i + 1, cmp);
            // 前 w% 是多少
            int pos = max(1, i * w / 100);
            // 输出这个人
            cout << a[pos] << " ";
        }
        return 0;
    }
    

    每次只有一个数无序,使用插入排序更快,90 分

    #include <bits/stdc++.h>
    using namespace std;
    int n, w;
    int a[100000 + 5];
    int main()
    {
        cin >> n >> w;
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        for (int i = 1; i <= n; i++)
        {
            // 前 i 个人排序
            // 此时 1~i-1 已经排好序了,只有第 i 个人没有排好序
            // 可以使用插入排序,把 a[i] 调整到合适位置
            int j = i;
            while (j > 1 && a[j] > a[j - 1])
            {
                swap(a[j], a[j - 1]);
                j--;
            }
            // 前 w% 是多少
            int pos = max(1, i * w / 100);
            // 输出这个人
            cout << a[pos] << " ";
        }
        return 0;
    }
    

    值域很小,直接计数排序超快,100 分

    #include <bits/stdc++.h>
    using namespace std;
    int n, w;
    int a[100000 + 5];
    int cnt[605];
    int main()
    {
        cin >> n >> w;
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        for (int i = 1; i <= n; i++)
        {
            // 计数排序
            cnt[a[i]]++;
            // 前 w% 是多少
            int pos = max(1, i * w / 100);
            // 输出这个人(找到第 pos 大的人)
            for (int j = 600; j >= 0; j--)
            {
                if (pos <= cnt[j])
                {
                    cout << j << " ";
                    break;
                }
                else
                    pos -= cnt[j];
            }
        }
        return 0;
    }
    
    • 1

    信息

    ID
    8000
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    11
    已通过
    4
    上传者