P7116 [NOIP2020] 微信步数
简化题意:
有一个 k 维场地,第 i 维宽为 wi,即第 i 维的合法坐标为 1, 2, · · · ,wi。
小 C 有一个长为 n 的行动序列,第 i 元素为二元组 (ci, di),表示这次行动小 C 的坐标由 (x1, x2, . . . , xci, . . . , xk) 变为(x1, x2, . . . , xci + di, . . . , xk)。小 C 会将行动序列重复无限次,直到走出这个场地。
接下来,小 C 会以场地中的每个整点为起点,按照行动序列走直到走出场地。小 C 想知道他一共会走几步。
答案对1e9 + 7取模
首先因为每一位是独立的,我们不妨把k维拆开
我们可以发现如果枚举每个位置并模拟走路过程复杂度必然爆炸,故此我们考虑改变记录答案的方式
我们考虑对于每个移动次数
我们不妨设
定义
对于从
-
当
,我们可以发现走了 步后依然没有走出去的条件要求: ,意思是这个点的坐标在第一周期任何一步都>= 1,而又因为 ,所以在任意时间都>=1 ,意思是这个点的坐标在最后一个周期后走的 步内 ,意思是这个点坐标在最后一个周期走完后位置 ,而又因为 ,所以在任意时间都
- 合并后即为
-
当
时,相同的,可以得到: -
对于
,可以得到:
我们可以发现我们在计算时已经枚举了
而且可以发现,k越大这个范围的区间肯定越小。因此对于每一维,我们可以通过二分的方法算出
对于每一个
根据前面的推到,
复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?