#CF2038A. 奖金项目
奖金项目
A. 奖金项目
每个测试的时间限制:2 秒
内存限制:512 兆字节
有一个由 个软件工程师组成的团队,编号为 到 。
老板承诺,如果他们完成一个额外的项目,就给他们发奖金。
该项目总共需要 单位的工作量。
老板承诺给第 个工程师的奖金为 布尔。
老板并不给工程师分配具体任务;期望每个工程师自愿完成一定整数单位的工作量。
只有当项目完成时,才会给整个团队发放奖金;也就是说,如果所有工程师自愿完成的工作总量 大于或等于 ,则项目完成,奖金发放。
每个工程师能完成的工作量没有上限。
但所有工程师都看重自己的劳动:第 个工程师认为 单位工作价值 布尔。
如果项目完成(奖金发放),那么第 个工程师完成 单位工作的收益为:
如果项目未完成,工程师不会自愿做任何工作。
工程师们长期共事,因此他们都知道奖金将如何分配,也知道同事们对自己劳动的价值评估。
也就是说,所有 和 对团队中的每个工程师都是已知的。
工程师们都很想拿到奖金,因此他们商定了以下工作分配流程:
. 第 个工程师说:“我将完成 单位的工作”,其中 是一个非负整数;
. 然后第 个工程师说:“我将完成 单位的工作”,其中 是一个非负整数;
. 以此类推;
. 最后第 个工程师说:“我将完成 单位的工作”,其中 是一个非负整数。
每个工程师在说出 时,都会选择使自己收益 最大化的值。
如果预期收益为零,工程师仍然愿意工作(为了积累经验并帮助同事获得奖金)。
但是,如果预期收益为负(比如需要做太多工作,或者项目注定无法完成),那么该工程师将不工作(完成 单位工作)。
已知每个工程师都完全理性地行动,你的任务是求出每个工程师说出的 的值。
输入
第一行包含两个整数 和 (,)—— 工程师人数和项目所需的工作总量。
第二行包含 个整数 (), 是项目完成后给第 个工程师的奖金。
第三行包含 个整数 (), 是第 个工程师的每单位工作成本。
输出
输出 个整数 ()—— 每个工程师在最优策略下完成的工作量。
注意:答案唯一。
样例
样例输入 1
3 6
4 7 6
1 2 3
样例输出 1
1 3 2
样例输入 2
3 12
4 7 6
1 2 3
样例输出 2
0 0 0
样例输入 3
3 11
6 7 8
1 2 3
样例输出 3
6 3 2
提示
在第一个样例中,工程师们共同完成了项目并拿到了奖金,即使第三个工程师的收益为零。
在第二个样例中,项目所需工作量太大,工程师们选择不做任何工作更有利。