题解:P16544 [EGOI 2026] 蛋糕 / Cakes
zhang_kevin · · 题解
记
考虑一种方案合法的充要条件是什么。假设众数的出现次数为
于是我们得到了
看到
-
对于大
K :此时\lceil \frac{V}{K} \rceil \leq \sqrt{V} ,因此直接把所有\lceil \frac{V}{K} \rceil 对应的左式的值全预处理出来存下,然后直接查表即可。 -
对于小
K :此时K 只有\sqrt{V} 种,因此直接预处理即可。
综上,总时间复杂度为
参考代码:
namespace Solution{
int n, q, a[100005], V; ll small[100005], big[100005];
inline void Solve(){
rd(n, q); fo(i, 1, n) rd(a[i]), V = max(V, a[i]);
const int B = sqrtl(V) + 5;
fo(K, 1, B) fo(i, 1, n) small[K] += a[i] / (int)ceil(1.0 * V / K);
fo(t, 1, B) fo(i, 1, n) big[t] += a[i] / t;
while(q--){
ll K; rd(K);
if(K <= B){
wrs(small[K] >= K ? "YES" : "NO"), pc('\n');
}else{
wrs(big[(int)ceil(1.0 * V / K)] >= K ? "YES" : "NO"), pc('\n');
}
}
return;
}
}