题号:NC272308
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld
题目描述
有这样一个经典故事,一位探险家到某个原始部落找一位向导带路。由于原式部落没有货币,所以探险家准备使用一块长度为

的金条支付这位向导

天的工资。
双方出于对对方的不信任,想到了一个方法可以避免某一方提前跑路。探险家将金条切成长度分别为

的三部分。
第一天结束后,探险家将长度为

的金条直接支付给向导。
第二天结束后,探险家将长度为

的金条支付给向导,并向他取回长度为

的金条。
第三天结束后,探险家将长度为

的金条直接支付给向导。
第四天结束后,探险家将另一块长度为

的金条支付给向导,并向他取回长度为

的金条。
第五天结束后,探险家将长度为

的金条直接支付给向导。
这样就构建了一套货币找零系统,使探险家能够在每一天的时候,“恰好”支付向导

个单位的金条。
现在有两块金条,长度分别为

,他准备雇佣这位向导

天,假设探险家切割一次长度为

的金条需要花费

的代价,切割一次长度为

的金条需要花费

的代价。
现在智乃想要知道,探险家通过切割两块金条构建货币找零系统使得他能够每一天``恰好''支付向导

个单位的金条的最小代价的具体方案,你可以给出任意一种。
输入描述:
第一行输入两个正整数
表示两块金条的长度。
接下来一行输入两个整数
,表示切割两块金条的代价分别是多少。
输出描述:
第一行输出三个整数
分别表示最小代价,第一块金条的切割次数,第二块金条的切割次数。
第二行输出一行
个正整数,表示切割后第一块金条每一部分的长度。
第三行输出一行
个正整数,表示切割后第二块金条每一部分的长度。
你可以输出任意满足条件的方案,但是需要保证切割每一段的长度大于
,例如不能出现长度为
的金条,切
刀分成
,只能切
刀分成
两部分。
示例3
输入
复制
10000000 10000000
1000000000 1
输出
复制
23 0 23
10000000
1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 32768 65536 131072 262144 524288 1048576 2097152 4194304 1611393