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

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

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

Cheongrin 的游戏开发 (Hard)

返回题目

题解

1. 工作次数与天数

设最终的共同进度为 TTT,所需天数为 mmm。任务 iii 必须被选择 ci=(T−ai)/bic_i=(T-a_i)/b_ici​=(T−ai​)/bi​ 次。以下条件是必要且充分的:

ci∈Z≥0,∑i=1Nci=Km,max⁡ici≤m.c_i\in\mathbb Z_{\ge0},\qquad \sum_{i=1}^N c_i=Km,\qquad \max_i c_i\le m.ci​∈Z≥0​,

必要性显然。对于充分性,当剩余 m>0m>0m>0 天时,选择剩余次数最多的 KKK 项任务。至少有 KKK 项任务的剩余次数为正,且剩余次数等于 mmm 的任务至多有 KKK 项,因此这些任务都会被选中。将选中任务的次数减一后,总次数变为 K(m−1)K(m-1),每项任务的次数至多为 。重复此操作即可构造合法安排。

2. 最终进度的范围

令 C=1018C=10^{18}C=1018、H=max⁡iaiH=\max_i a_iH=maxi​a、。进度不会减少,每项任务每天至多被选择一次,因此任何满足 的解都满足 。根据输入保证,如果此区间内不存在 的解,就应判定为无解。仅有 并不能保证 ,因此仍需单独检查天数。

3. 广义中国剩余定理

所有 cic_ici​ 都是整数,等价于对每项任务都有 T≡ai(modbi)T\equiv a_i\pmod{b_i}T≡ai​(。维护合并后的条件 ,其中 ,初始为 。将 代入下一个同余式,得到 。

令 g=gcd⁡(D,bi)g=\gcd(D,b_i)g=gcd(D,bi​)。若 ggg 不能整除 ai−ra_i-ra,则无解。否则,令 ,求

x≡ai−rg(Dg)−1(modq)x\equiv\frac{a_i-r}{g}\left(\frac Dg\right)^{-1}\pmod qx≡gai​−r​

在 [0,q)[0,q)[0,q) 内的解,再更新 r←r+Dxr\leftarrow r+Dxr←r+Dx、D←DqD\leftarrow DqD←Dq。当 时取 。模逆元可以用扩展欧几里得算法求出。

若合并过程中出现 D>UD>UD>U,则 [0,U][0,U][0,U] 内唯一可能的值是 rrr。停止合并,直接对整个输入检查 T=rT=rT=r 的同余条件、范围、总次数、最大次数和天数上限。尚未合并的同余条件也必须检查。

4. 一次式与下界

如果所有条件合并后仍有 D≤UD\le UD≤U,则令 T=r+DtT=r+DtT=r+Dt。定义整数

αi=r−aibi,βi=Dbi,A=∑iαi,W=∑iβi.\alpha_i=\frac{r-a_i}{b_i},\quad\beta_i=\frac D{b_i},\quad A=\sum_i\alpha_i,\quad W=\sum_i\beta_i.αi​=b

于是 ci=αi+βitc_i=\alpha_i+\beta_i tci​=αi​+βi​t,。由于 ,天数随 增大而增大。先令 。

将 ci≤mc_i\le mci​≤m 整理为 (Kβi−W)t≤A−Kαi(K\beta_i-W)t\le A-K\alpha_i(Kβi​−。当 时,可得下界

t≥⌈Kαi−AW−Kβi⌉.t\ge\left\lceil\frac{K\alpha_i-A}{W-K\beta_i}\right\rceil.t≥⌈W−Kβi​Kα

用这些下界更新 ℓ\ellℓ。其余任务留到最后检查候选解时处理。必须正确实现分子为负数时的向上取整除法。

5. 第一个满足同余条件的候选值

总次数必须是 KKK 的倍数,因此求解 Wt≡−A(modK)Wt\equiv-A\pmod KWt≡−A(modK)。令 g=gcd⁡(W,K)g=\gcd(W,K)g=。若 不能整除 ,则无解。否则将两边除以 ,利用模逆元得到 ,其中 ,。当 时取 。不小于下界的第一个候选值为

t∗=t0+P⌈ℓ−t0P⌉.t_*=t_0+P\left\lceil\frac{\ell-t_0}{P}\right\rceil.t∗​=t0​+P⌈

先检查 t∗≤⌊(U−r)/D⌋t_*\le\lfloor(U-r)/D\rfloort∗​≤⌊(U−r)/D⌋。若不满足,不进行大数乘法,直接判定无解。否则计算 T=r+Dt∗T=r+Dt_*T=,并直接检查全部原始条件。

6. 为什么只需检查一个候选值

所有满足 Kβi<WK\beta_i<WKβi​<W 的条件都已计入下界。对于其余任务,(Kβi−W)t(K\beta_i-W)t(Kβi​− 不会减小,因此第一个候选值若违反不等式,后续候选值也都会违反。天数 同样递增,所以第一个候选值若满足 ,后面的候选值也不可能有效。因此,第一个候选值成功时就是最优解,失败时则无解。

7. 整数范围与复杂度

有 U≤1027+109U\le10^{27}+10^9U≤1027+109。由于仅在 D≤UD\le UD≤U 时继续合并,新周期满足 。与模逆元相乘前应先取模。一次式的总和及下界计算的分子,其绝对值可安全地限制在 以内。先确认候选值的范围,再将它与 相乘,并由 重新计算工作次数和天数。因此,该实现中的所有中间值都能存入有符号 位整数。不能无限制地计算完整最小公倍数,也不能直接将超出范围的候选值与 相乘。

令 B=max⁡ibiB=\max_i b_iB=maxi​bi​,在固定宽度整数运算下,时间复杂度为 O(Nlog⁡B+log⁡K)O(N\log B+\log K)O(N,空间复杂度为 。

8. 子任务解法

子任务 1 中,bi=1b_i=1bi​=1。令 di=H−aid_i=H-a_idi​=H−、、,可得 和 。当 时,只有初始进度全部相等的情况有解。否则求出下界,再枚举 在模 意义下的余数 到 ,时间复杂度为 。

子任务 2 中,枚举从 HHH 到 100 000100\,000100000 的最终进度,检查必要充分条件。由于 D≤lcm⁡(1,2,3,4,5)=60D\le\operatorname{lcm}(1,2,3,4,5)=60D≤lcm(1,2,3,4,5)=、 且 ,上述第一个候选值满足 ,可行的最小进度小于 。因此枚举范围足够,时间复杂度为 。子任务 3 使用完整解法。

Solution written by GPT

i=1∑N​
ci​
=
Km,imax​ci​≤
m.
K(m−1)
m−1m-1m−1
i
​
U=min⁡i(ai+Cbi)U=\min_i(a_i+Cb_i)U=mini​(ai​+Cbi​)
m≤Cm\le Cm≤C
H≤T≤UH\le T\le UH≤T≤U
m≤Cm\le Cm≤C
T≤UT\le UT≤U
m≤Cm\le Cm≤C
mod
bi​
)
T≡r(modD)T\equiv r\pmod DT≡r(modD)
0≤r<D0\le r<D0≤r<D
r=0,D=1r=0,D=1r=0,D=1
T=r+DxT=r+DxT=r+Dx
Dx≡ai−r(modbi)Dx\equiv a_i-r\pmod{b_i}Dx≡ai​−r(modbi​)
i​
−
r
q=bi/gq=b_i/gq=bi​/g
(gD​)−1
(modq)
q=1q=1
q=1
x=0x=0x=0
i
​
r−ai​
​
,
βi​
=
bi​D​,A=
i∑​αi​,W=
i∑​βi​.
m=(A+Wt)/Km=(A+Wt)/Km=(A+Wt)/K
W>0W>0W>0
ttt
ℓ=max⁡(0,⌈(H−r)/D⌉)\ell=\max(0,\lceil(H-r)/D\rceil)ℓ=max(0,⌈(H−r)/D⌉)
W
)
t
≤
A−
Kαi​
Kβi<WK\beta_i<WKβi​<W
i​
−
A
​
⌉
.
gcd
(
W
,
K
)
ggg
AAA
ggg
t≡t0(modP)t\equiv t_0\pmod Pt≡t0​(modP)
P=K/gP=K/gP=K/g
0≤t0<P0\le t_0<P0≤t0​<P
P=1P=1P=1
t0=0t_0=0t0​=0
Pℓ−t0​​
⌉
.
r
+
Dt∗​
W)t
mmm
m>Cm>Cm>C
D′≤1036+1018D'\le10^{36}+10^{18}
D′≤1036+1018
4⋅1032+10154\cdot10^{32}+10^{15}4⋅1032+1015
DDD
TTT
128128128
WWW
log
B
+
logK)
O(N)O(N)O(N)
ai​
S=∑idiS=\sum_i d_iS=∑i​di​
T=H+qT=H+qT=H+q
(N−K)q≥Kmax⁡idi−S(N-K)q\ge K\max_i d_i-S(N−K)q≥Kmaxi​di​−S
S+Nq≡0(modK)S+Nq\equiv0\pmod KS+Nq≡0(modK)
K=NK=NK=N
qqq
KKK
000
K−1K-1K−1
O(N+K)O(N+K)O(N+K)
60
∣αi∣≤60|\alpha_i|\le60∣αi​∣≤60
N,K≤8N,K\le8N,K≤8
t∗≤967t_*\le967t∗​≤967
58 08058\,08058080
O(100 000N)O(100\,000N)O(100000N)