模拟21 题解
A. 折纸
考虑O(nm)O(nm)暴力,
对于每次操作,暴力修改n个点的下标,
同时维护左右端点下标,最后相减就是答案。
对于后40分,n的范围很大。
恰好我们并不关注每个点的下标。
对于每次翻折,
O(m)O(m)查询并记录下翻折操作时的下标即可。
注意每次操作不能单纯向一个方向翻折。
在极端数据下可能被卡爆longlong。
B. 不等式
大力推式子:
1.l<=s∗xl<=s∗x%mod<=rmod<=r
2.l<=s∗x−mod∗y<=rl<=s∗x−mod∗y<=r
3.−l>=mod∗y−s∗x>=−r−l>=mod∗y−s∗x>=−r
4.−l−l%s>=mod∗ys>=mod∗y%s>=−rs>=−r%ss
发现第四步的形式与第一步相同,递归可以解决。
Q:递归边界是什么?
A:当[l,r][l,r]范围内存在s的一个倍数,直接返回这个数是x的多少倍。
Q:为什么由3到4可以直接取模?
A:因为递归没有到达边界,[l,r][l,r]内不存在s的倍数,也就是说l,r对于s向下整除取得相同的值,
因为中间的数夹在两者之间,三者对于s向下整除取得相同的值。
将aa改写成a−⌊ab⌋∗ba−⌊ab⌋∗b的形式,显然是正确的。
Q:为什么复杂度是正确的?
A:观察递归式,发现问题规模的缩小与辗转相除求gcd相同。
C. reverse
数位dp,但关注翻转后的状态。
设dp[i][j][0/1/2][0/1/2]dp[i][j][0/1/2][0/1/2]表示到第i位,前缀长度为j(为了忽略前导0),
前缀翻转后与l比较为小于/等于/大于,前缀翻转后与r比较为小于/等于/大于。
dfs+记忆化搜索。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个我遇到过的“量子力学”级别的BUG。
· Linux系列:如何调试 malloc 的底层源码
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· Apifox不支持离线,Apipost可以!
· 历时 8 年,我冲上开源榜前 8 了!
· 零经验选手,Compose 一天开发一款小游戏!
· Trae 开发工具与使用技巧
· 通过 API 将Deepseek响应流式内容输出到前端