信息
- ID
- 1683
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者
对一个数 x,若要让它同时成为若干个给定整数的倍数,只需把它增加到这些整数最小公倍数的下一个倍数,代价为 (L−xmodL)modL。
用三位二进制状态表示当前是否已经得到 a,b,c 的倍数,预处理每个非空状态对应的最小公倍数。依次处理每个 Ai,它可以不变,也可以承担任意非空状态的要求;据此更新八个状态的最小代价,答案就是最终状态 1112。
每个数只进行常数次状态转移,时间复杂度为 O(82N)=O(N),空间复杂度为 O(8)。计算最小公倍数时先约分再用 __int128 相乘,以避免中间乘积溢出。