牛客练习赛100 D小红的构造题 (构造)

https://ac.nowcoder.com/acm/contest/11251/D
image

  • 根据题目给的数据范围,容易想到我们需要将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;
}

刚做完一道同类型的题,这个又不会了😭

posted @ 2022-07-05 21:32  qingyanng  阅读(633)  评论(0编辑  收藏  举报