- 集合 (
) 必须包含 (
)(每个至少出现一次)。
- 集合中不能包含 ( k )。
即:存在k个不同的正整数 (),它们的出现次数 (
) 是 (
) 的一个排列,并且所有 (
)。
为了用最小的 m 实现 mex = k ,让大的出现次数配小的数字值,以最小化序列和。
最优分配方案: 数字 i 出现 k-i 次
这样序列和最小值为:
要使 mex 至少为 k ,必须满足:
即:
给定 m ,求最大的整数 k 满足上式。
#include <iostream>
#include<cmath>
using namespace std;
int main() {
int T;
cin>>T;
while(T--){
long long m,k;
cin>>m;
k=pow(6.0*m,1.0/3);
while(k*k*k-k>6*m)k--;
while((k+1)*(k+1)*(k+1)-(k+1)<=6*m)k++;
cout<<k<<endl;
}
return 0;
}

京公网安备 11010502036488号