当前位置: 首页 > news >正文

题解:CF712D Memory and Scores

题意

有两个整数 \(a,b\),进行 \(t\) 轮操作,每轮操作先在 \([-k,k]\) 范围内取一个整数加到 \(a\) 中,再在 \([-k,k]\) 范围内取一个整数加到 \(b\) 中,求最终使 \(a > b\) 的方案数。

思路

\(a\) 增加的总和为 \(pa\)\(b\) 增加的总和为 \(pb\),则题目的最终条件可以写为 \(a+pa>b+pb\)。由于题目中出现的数都是整数,所以可以改写成 \(a+pa \ge b+pb+1\),整理得 \(a-b-1 \ge pb-pa\)

接下来是关键的一步转化,由于 \(pa\) 是在 \([-k,k]\) 范围内选整数加和得到的,那么 \(-pa\) 也是在 \([-k,k]\) 范围内选整数加和得到的,得到两者的方案数是相同的。也就是说,问题转换成了求最终 \(a-b-1 \ge pa+pb\) 的方案数。由于给 \(pa\) 选数和给 \(pb\) 选数是等价的,所以可以视作进行 \(2t\) 次操作,每次操作在 \([-k,k]\) 之间选取一个整数,选的数和为 \(sum\),求最终使 \(a-b-1 \ge sum\) 的方案数。

接下来就很简单了,设 \(f_{i,j}\) 表示进行了 \(i\) 次操作,当前选的所有数和为 \(j\) 的方案数,则有

\[f_{i,j} = \sum_{l=j-k}^{j+k}{f_{i-1,l}} \]

最终答案为 \(\sum_{i=-2tk}^{a-b-1}{f_{n,i}}\)。这样会有下标变成负数,我们注意到和的值域是 \([-2tk,2tk]\),所以把下标全部加上 \(2tk\),把 \(f\) 数组滚动掉一维,使用前缀和优化即可。时间复杂度为 \(O(kt^2)\)

代码

http://www.jsqmd.com/news/29384/

相关文章:

  • 思维的断章,觉知的永恒:一个基于“内观照叙事模型”的认知革命与跨学科范式重构
  • 拾壹月贰
  • struct page
  • NFS 服务端/客户端配置
  • CSP-S2025 题目解析
  • [Record] CSP-S 2025 邮寄
  • 2025 CSP-S 游记
  • [题解]CSP-S 2025 T1~T3 题解
  • 关于git关联github问题
  • AT ABC285E Work or Rest 题解
  • 代码复杂度的代价远比你想象得大
  • CSP2025 - S 年度总结大会报告
  • minio 服务端加密方式
  • 25CSP退役游记(11.1更新)
  • 第二章实践作业
  • (补11月)代码大全阅读笔记2
  • java 基础语法一
  • VisualStudio 2022如何打开.slnx文件格式的解决方案
  • (补11月)代码大全阅读笔记3
  • CSP2025 - S 游记
  • CSP-S游记
  • 小组作业1
  • C语言字符串及其函数
  • CPULOAD建模设计
  • C 文件操作全解速览
  • Java记录类:简化数据载体的新选择
  • 第二次算法作业
  • NOIP 2025 游记 退役记
  • 一个万古常青的、小而美的输入法
  • 开始学深度学习!