CF468C Hack It! 构造
让人觉得脑子不够用的构造
考虑对于一个区间[l,r]如何让它调整使得最后的结果恰好加上1。
注意到对于一个<1018的数x,f(x+1018)=f(x)+1,所以如果r−l=1018−1且l<1018,那么将区间[l,r]变为区间[l+1,r+1]之后,答案恰好增加1。
而a≤1018,所以我们初始取l=0,r=1018−1,之后不断将区间[l,r]变为区间[l+1,r+1],一定可以在不超过1018次内找到满足mod的l,r,也就是每一次从[l,r]变为[l+1,r+1]时l < 10^{18},所以这样是一定可以构造出方案的。
那么我们最后需要做的事情就是求\sum\limits_{i=0}^{10^{18}-1}f(i)的值了。
\begin{align*} \sum\limits_{i=0}^{10^{18}-1} f(i) & = 45 \times 10^{17} + 10 \times \sum\limits_{i=0}^{10^{17}-1} f(i) \\ & = 45 \times 10^{17} + 450 \times 10^{16} + 100 \times \sum\limits_{i=0}^{10^{16}-1} f(i) \\ &= ... \\ &= 45 \times 18 \times 10^{17} \\ &= 8.1 \times 10^{19} \end{align*}
那么我们令l = a - (8.1 \times 10^{19} \mod a) , r = l + 10^{18}-1,就是一组合法的解。
注意上面保证了l \neq 0
都说到这里了你难道不会写代码吗?
分类:
基础算法——构造
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· 《HelloGitHub》第 106 期
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用