牛客练习赛100 D小红的构造题 (构造)
https://ac.nowcoder.com/acm/contest/11251/D
- 根据题目给的数据范围,容易想到我们需要将n贡献三次方地构造出来。
- 不容易发现:对于rererere...序列, 第k个re后面加个d,能够贡献(1 + k) * k / 2 * x. 对于范围内所有数都能构造出来
- 对于一个re后面最多加\(k^{1 / 3}\) 个,后面的re后这个数字降的非常快,所以最终长度大概为\(k^{1 / 3}\)
ll bit[N];
int main () {
ll k; cin >> k;
ll top =1;
for ( ; top * top * top <= k * 2; ++ top );
for ( ll i = top; i >= 1; -- i ) {
bit[i] = k / ( (1 + i) * i / 2);
k %= ( (1 + i) * i / 2);
}
for ( int i = 1; i <= top; ++ i ) {
cout << "re"; while( bit[i] -- ) cout << "d";
}
return 0;
}
刚做完一道同类型的题,这个又不会了😭