DOJ logoDOJ
题目
最近添加的题目收藏的题目Workbooks
分类DLC比赛小组团队讨论区
排名
解题数量排行榜连续解题排名DOJ Power 排行榜
评测状态
征题登录注册
DOJ logoDOJ

支持 OI 子任务计分、Elo 等级分和 Discord 认证的社区在线评测系统。

题目
题目列表分类
社区
比赛排名讨论区公告举办外部比赛指南
账号
登录注册评测状态
政策
服务条款DLC 使用规则隐私政策API 文档语言运行环境比赛排名奖励评级与表现
© 2026 DOJ
保留所有权利
题解

Shirogane 想唱歌

返回题目

题解

由于总误差不超过 EEE,每一项都满足 ∣Ai−Bi∣≤E|A_i-B_i|\le E∣Ai​−Bi​∣≤E。因为 0≤Ai≤500\le A_i\le500≤Ai​≤50 且 Bi≥0B_i\ge0Bi​≥0,所有可能的音高均在 L=0L=0L=0 到 U=50+EU=50+EU=50+E 的范围内。该范围包含 W=51+E≤101W=51+E\le101W=51+E≤101 个整数。

设 Di(e,x)D_i(e,x)Di​(e,x) 表示确定前 iii 项后,总误差恰好为 eee,且最后一个音高 BiB_iB 为 的序列数量。只保存满足 、 的状态。

第一个音高固定为 B1=0B_1=0B1​=0,因此第一项的误差为 A1A_1A1​。若 A1≤EA_1\le EA,则初始化

D1(A1,0)=1.D_1(A_1,0)=1.D1​(A1​,0)=1.

其余状态均为 000。若 A1>EA_1>EA1​>E,则不存在合法序列,可以直接输出 000。

现在设 i≥2i\ge2i≥2,并将最后一个音高选为 xxx。这一项的误差为 d=∣Ai−x∣d=|A_i-x|d=∣Ai​−x∣,因此前 项的总误差必须为 。前一个音高 必须满足 ,所以当 时,

Di(e,x)=∑y=max⁡(L,x−K)min⁡(U,x+K)Di−1(e−d,y).D_i(e,x)=\sum_{y=\max(L,x-K)}^{\min(U,x+K)}D_{i-1}(e-d,y).Di​(e,x)=

当 e<de<de<d 时,该状态的值为 000。

按照 i=2,3,…,Ni=2,3,\ldots,Ni=2,3,…,N 的顺序,枚举每个误差 eee 和最后一个音高 xxx,再直接枚举上述区间内的 yyy 并求和。所有加法均对 1 取模。

最终答案为

∑e=0E∑x=LUDN(e,x).\sum_{e=0}^{E}\sum_{x=L}^{U}D_N(e,x).e=0∑E​x=L∑U

应当将误差不超过 EEE 的所有状态相加,而不是只统计误差恰好为 EEE 的状态。

共有 N(E+1)WN(E+1)WN(E+1)W 个状态,每个状态最多检查 2K+12K+12K+1 个前一个音高。因此,时间复杂度为

O(N⋅W⋅(E+1)⋅(2K+1)).O\bigl(N\cdot W\cdot(E+1)\cdot(2K+1)\bigr).O(N⋅W⋅(E+1)⋅(2K+1)).

这些因子分别对应元素个数 × 音高范围 × 总误差范围 × 相邻音高差范围。在给定限制下,可以直接计算这些转移。

每一步只使用紧接着的上一步,所以只需保存两层数组。空间复杂度为 O(W(E+1))O(W(E+1))O(W(E+1))。将音高 xxx 对应到数组下标 x−Lx-Lx−L 即可。

证明

第一项唯一确定为 000,其误差为 A1A_1A1​。因此,在 A1≤EA_1\le EA1​≤ 时设置 ,恰好统计了唯一合法的长度为 的序列。若 ,后续项无法减小总误差,因此答案为 。

Solution written by GPT6

i​
xxx
0≤e≤E0\le e\le E0≤e≤E
L≤x≤UL\le x\le UL≤x≤U
1​
≤
E
i−1i-1i−1
e−de-de−d
yyy
∣x−y∣≤K|x-y|\le K∣x−y∣≤K
e≥de\ge de≥d
y=max(L,x−K)
∑
min(U,x+K)
​
Di−1​
(
e
−
d,y).
 000 000 0071\,000\,000\,007
1000000007
​
DN​
(
e
,
x
)
.
E
D1(A1,0)=1D_1(A_1,0)=1D1​(A1​,0)=1
111
A1>EA_1>EA1​>E
000

假设 Di−1D_{i-1}Di−1​ 正确。从一个最后音高为 xxx、总误差为 eee 的合法序列中删除最后一项后,得到的先前序列的误差为 e−∣Ai−x∣e-|A_i-x|e−∣Ai​−x∣,且其最后音高 yyy 满足 ∣x−y∣≤K|x-y|\le K∣x−y∣≤K。

反过来,在这样的先前序列末尾添加 xxx,就能满足相邻音高差的条件,且总误差恰好为 eee。这两个过程互为逆过程,因此该转移不重不漏地统计了所有合法序列。最后将满足 e≤Ee\le Ee≤E 的所有状态相加,即可得到所求答案。