DOJ logoDOJ
문제
최근 추가된 문제들저장한 문제문제집
카테고리DLC대회그룹팀게시판
랭킹
문제 풀이 랭킹스트릭 랭킹DOJ Power 랭킹
현황
문제 제안로그인회원가입
DOJ logoDOJ

OI 서브태스크 채점, Elo 레이팅, Discord 인증을 갖춘 커뮤니티 온라인 저지.

문제
문제 목록카테고리
커뮤니티
대회랭킹게시판공지사항외부 대회 개최이용 안내
계정
로그인회원가입채점 현황
정책
이용약관DLC 이용 규칙개인정보 처리방침API 사용 설명서언어별 채점 환경대회 순위 보상레이팅과 퍼포먼스
© 2026 DOJ
모든 권리 보유
해설

청린의 게임개발 (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개이므로 모두 선택된다. 선택한 횟수를 11씩 줄이면 합은 이고 모든 횟수는 이하이다. 이를 반복하면 유효한 일정을 얻는다.

2. 최종 진행도의 범위

C=1018C=10^{18}C=1018, H=max⁡iaiH=\max_i a_iH=maxi​a, 라 하자. 진행도는 감소하지 않고 각 작업은 하루에 최대 한 번 수행되므로, 인 해는 반드시 를 만족한다. 문제의 보장에 따라 이 범위에서 인 해를 찾지 못하면 불가능하다. 만으로 가 보장되지는 않으므로 일수도 별도로 검사한다.

3. 일반화된 CRT

모든 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​)가 ai−ra_i-rai​를 나누지 않으면 불가능하다. 그렇지 않으면 에 대하여

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

로 0≤x<q0\le x<q0≤x<q를 구하고, r←r+Dxr\leftarrow r+Dxr←r+Dx, D←DqD\leftarrow DqD←로 갱신한다. 이면 이다. 역원은 확장 유클리드 알고리즘으로 구한다.

병합 중 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\rceilt≥⌈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\rceilt∗​=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≥WK\beta_i\ge WKβi​≥W인 작업에서는 가 감소하지 않으므로 첫 후보가 부등식을 위반하면 이후 후보도 모두 위반한다. 도 증가하므로 첫 후보에서 이면 뒤의 후보도 불가능하다. 따라서 첫 후보가 성공하면 최소 일수이고, 실패하면 해가 없다.

7. 정수 범위와 복잡도

U≤1027+109U\le10^{27}+10^9U≤1027+109이고 CRT는 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.
1
K(m−1)K(m-1)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​)
−
r
q=bi/gq=b_i/gq=bi​/g
(gD​)−1
(modq)
Dq
q=1q=1q=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
)
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∗​
(Kβi−W)t(K\beta_i-W)t(Kβi​−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
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)