理解步长操作:
每种步长操作将指针顺时针拨动 d_i 个刻度。密码盘共有 n 个刻度,拨动后新位置为 (当前位置 + d_i) % n。
目标:
对于每个询问,给出目标刻度 t_i。我们需要通过组合不同的步长操作,从刻度 0 出发,最少需要多少次操作才能恰好指向刻度 t_i。
数学分析:
在一个圆形密码盘上,分布着 n 个均匀的刻度,按顺时针方向依次编号为 0,1,…,n−1。指针初始指向刻度 0。
给定 k 种合法的步长操作,第 i 种步长为 di。每次操作,你选择一个步长 d∈{d1,…,dk},并将指针顺时针拨动 d 个刻度(若越过 n−1 则从 0 继续计数)。同一种步长可以重复使用。
现在有 m 个询问,每个询问给出一个目标刻度 t(0≤t<n)。你需要回答:从刻度 0 出发,最少需要多少次操作才能使指针指向刻度 t?如果无论如何都无法到达,则报告 −1。
数据范围:密码盘刻度数 n 满足 1≤n≤5×104;可选步长数量 k 满足 1≤k≤100;询问数量 m 满足 1≤m≤105。每个步长 di 均为整数且 1≤di≤n;每个目标刻度 t 为整数且 0≤t<n。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册