【提示】如果你得了 68pts。
查看原帖
【提示】如果你得了 68pts。
270854
二叉苹果树楼主2023/11/14 16:02

能获得这个分数,说明贪心思路是完全正确的。

只是最后分配的细节上出了一点点问题。

for (int i = 0; i < e.size(); i++)
    {
        while (g[e[i]]--)
        {
            int min = 0x3f3f3f3f, id;
            for (int j = 1; j <= n; j++)
                if (t[j][e[i]] < min)
                    min = t[j][e[i]], id = j;
            p[id] = (p[id] * e[i] % mod), t[id][e[i]]++;
        }
    }

这是我的代码中正确的部分,能看出来分配时不能只找一次每种因数的指数最小值然后一次分配完,因为在分配过程中该因数指数的相对大小会发生变化,应该每分配一次就重新找最小值,维护成堆也行。

2023/11/14 16:02
加载中...