CF1951D Buying Jewels
题目描述
[Nightwish feat. Jonsu - Erämaan Viimeinen](https://youtu.be/QYlFn5q_UQk)
ඞ
Alice 有 $n$ 枚硬币,想在 Bob 的珠宝店购物。今天,虽然 Bob 还没有搭建好店铺,但他希望确保 Alice 最终恰好买到 $k$ 件珠宝。为了搭建店铺,Bob 最多可以设置 $60$ 个摊位(每个摊位有无限数量的珠宝),并且每个摊位的每件珠宝价格可以设置为 $1$ 到 $10^{18}$ 之间的任意整数。
幸运的是,Bob 知道 Alice 会采用贪心的购买方式:她会先去第 $1$ 个摊位,尽可能多地购买珠宝,然后去第 $2$ 个摊位,依此类推,直到最后一个摊位。基于这一点,Bob 可以选择设置摊位的数量,并为每个摊位设置价格,使得 Alice 恰好买到 $k$ 件珠宝。请你帮助 Bob 完成这个任务,或者判断是否无法实现。
注意,Alice 不需要花光所有的硬币。
输入格式
每组测试数据包含多个测试用例。第一行包含一个整数 $t$($1 \le t \le 1000$)——表示测试用例的数量。接下来的每组测试用例包含两个正整数 $n$ 和 $k$($1 \le n, k \le 10^{18}$)——分别表示 Alice 拥有的硬币数量和 Bob 希望 Alice 最终买到的珠宝数量。
输出格式
对于每个测试用例,如果 Bob 能够设置不超过 $60$ 个摊位,并为每个摊位设置价格,使得 Alice 恰好买到 $k$ 件珠宝,则输出一行 "YES"。否则输出一行 "NO"。
如果答案是 "YES",则在第二行输出一个整数 $s$($1 \le s \le 60$)——Bob 需要设置的摊位数量。在第三行输出 $s$ 个正整数 $p_1, p_2, \ldots, p_s$($1 \le p_i \le 10^{18}$),表示每个摊位的珠宝单价。如果有多种方案,输出任意一种均可。
说明/提示
在第一个测试用例中,Alice 在第一个摊位购买了 $3$ 件珠宝,还剩 $1$ 枚硬币。这不足以在后续摊位购买任何珠宝,因此 Alice 最终恰好买到 $3$ 件珠宝。
在第三个测试用例中:
- 在第一个摊位,Alice 购买了 $1$ 件珠宝,还剩 $127$ 枚硬币。
- 在第二个摊位,Alice 购买了 $1$ 件珠宝,还剩 $63$ 枚硬币。
- 在第三个摊位,Alice 购买了 $1$ 件珠宝,还剩 $31$ 枚硬币。
- 在第四个摊位,Alice 购买了 $1$ 件珠宝,还剩 $15$ 枚硬币。
- 在第五个摊位,Alice 购买了 $1$ 件珠宝,还剩 $7$ 枚硬币。
- 在第六个摊位,Alice 购买了 $1$ 件珠宝,还剩 $3$ 枚硬币。
- 在第七个摊位,Alice 购买了 $1$ 件珠宝,还剩 $1$ 枚硬币。
- 在第八个摊位,Alice 购买了 $1$ 件珠宝,还剩 $0$ 枚硬币。
因此,Alice 最终恰好买到 $8$ 件珠宝。
由 ChatGPT 4.1 翻译