设剩余宝箱数量为 m=n−k,被探险家带走的 k 个宝箱的宝石数和为:
T=S−R
因为被带走的是宝石数最多的 k 个宝箱,所以一定存在一个分界宝石数 c,满足:
一位探险家在古老遗迹中找到了 n 个宝箱,每个宝箱里装有 1 到 6 颗宝石。他统计出所有宝箱的宝石总数为 S。
随后,探险家决定带走宝石数量最多的 k 个宝箱(若出现并列,他可以任选其中的 k 个),将剩余的 n−k 个宝箱留给同伴,这些剩余宝箱的宝石总数为 R。
现在已知四个整数 n,k,S,R,请你帮助探险家重构一组可能的原始宝石序列 v1,v2,…,vn,要求满足:
如果不存在符合条件的序列,请指出无解。
约束条件
输入只有一行,包含四个整数 n, k, S, R,以空格分隔。数据保证满足上述约束范围。
若存在合法方案,输出一行 n 个整数,表示一组合法的宝箱宝石序列,整数之间用空格分隔;否则输出 -1。
输入
5 2 20 10
输出
4 4 2 6 4
说明
宝箱总数 n=5,取走 k=2,总宝石数 S=20,剩余宝石数 R=10。剩余宝箱数 m=n−k=3,取走的宝石数和 T=S−R=10。
枚举阈值 c:
构造剩余 3 个宝箱(范围 [1,4]):初始每个为 1,剩余调节量 10−3=7。依次分配最大值 min(7,3)=3,得 4;剩余 4,再分配 min(4,3)=3,得 4;最后剩余 1,分配 1 得 2。剩余序列为 4 4 2。
构造取走的 2 个宝箱(范围 [4,6]):初始每个为 c=4,和为 8,剩余调节量 10−8=2。先分配 min(2,2)=2,得 6;再分配 0 得 4。取走序列为 6 4。
合并得到完整序列 4 4 2 6 4。前 2 大的元素为 6 和 4,剩余元素和 4+4+2=10,且总和为 20,均满足要求。
输入
3 1 10 8
输出
-1
说明
宝箱总数 n=3,取走 k=1,总宝石数 S=10,剩余宝石数 R=8。剩余宝箱数 m=2,取走的宝石数和 T=S−R=2。
枚举阈值 c:
不存在同时满足 c≥4 和 c≤2 的整数 c,因此无解,输出 -1。
输入
5 3 30 12
输出
6 6 6 6 6
说明
宝箱总数 n=5,取走 k=3,总宝石数 S=30,剩余宝石数 R=12。剩余宝箱数 m=2,取走的宝石数和 T=18。
枚举阈值 c:
构造剩余 2 个宝箱(范围 [1,6]):初始各为 1,剩余调节量 12−2=10。依次分配 min(10,5)=5,得 6,再分配 5,得 6,得到 6 6。取走的 3 个宝箱(范围 [6,6]):每个直接为 6,得到 6 6 6。
完整序列为全 6。最大的 3 个均为 6,剩余 2 个的和为 12,满足边界条件。
输入
4 2 12 5
输出
3 2 4 3
说明
宝箱总数 n=4,取走 k=2,总宝石数 S=12,剩余宝石数 R=5。剩余宝箱数 m=2,取走的宝石数和 T=7。
枚举阈值 c:
剩余 2 个宝箱(范围 [1,3]):初始各 1,调节量 5−2=3。先分配 min(3,2)=2 得 3,再分配 1 得 2,序列为 3 2。取走 2 个宝箱(范围 [3,6]):初始各 3 和为 6,调节量 7−6=1。第一个分配 1 得 4,第二个得 3,序列为 4 3。
完整序列为 3 2 4 3。最大的 2 个为 4 和 3,剩余和为 3+2=5,总和为 12,符合要求。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.