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

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

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

Reading KakaoTalk

返回题目

题解

각 사람 ppp가 마지막으로 작성한 메시지의 번호를

Lp=max⁡({i∣Ai=p}∪{0})L_p=\max(\{i\mid A_i=p\}\cup\{0\})Lp​=max({i∣Ai​=p}∪{0})

라고 하자. 작성자 조건은 Cp≥LpC_p\ge L_pCp​≥Lp​와 같다.

편의를 위해 B0=NB_0=NB0​=N, BM+1=0B_{M+1}=0BM+1​=0으로 둔다. 정확히 번 메시지까지 읽은 사람의 수를 라고 하면

Dk=Bk−Bk+1(0≤k≤M)D_k=B_k-B_{k+1}\qquad(0\le k\le M)Dk​=Bk​−B

이다. 입력에서 BBB가 비증가 수열임이 보장되므로 모든 DkD_kDk​는 음이 아닌 정수이다.

EkE_kEk​를 Lp≤kL_p\le kLp​≤k인 사람의 수라고 하자. Cp=kC_p=k가 되려면 반드시 여야 한다.

k=0,1,⋯ ,Mk=0,1,\cdots,Mk=0,1,⋯,M 순서로 Cp=kC_p=kCp​=k인 사람을 정한다. 보다 작은 값을 이미 받은 사람은 정확히

N−BkN-B_kN−Bk​

명이다. 이들은 모두 Lp≤kL_p\le kLp​≤k를 만족한다. 따라서 아직 값을 받지 않았고 Cp=kC_p=kCp​=k가 될 수 있는 사람은

Ek−(N−Bk)E_k-(N-B_k)Ek​−(N−Bk​)

명이다.

이 중 정확히 DkD_kDk​명을 고르면 된다. 따라서 답은

∏k=0M(Ek−(N−Bk)Dk)\prod_{k=0}^{M}\binom{E_k-(N-B_k)}{D_k}k=0∏M​(D

이다. 문제에서 유효한 수열이 하나 이상 존재한다고 보장하므로 모든 단계의 선택은 가능하다. 구현에서는 조합의 위쪽 값이 DkD_kDk​보다 작거나 음수인지 확인해도 된다.

각 사람의 LpL_pLp​를 구한 뒤, LpL_pLp​의 빈도에 대한 누적합으로 모든 EkE_kE를 구할 수 있다. 팩토리얼과 역팩토리얼을 전처리하면 각 조합을 에 계산할 수 있다.

시간 복잡도는 O(N+M)O(N+M)O(N+M)이고, 메모리 복잡도는 O(N+M)O(N+M)O(N+M)이다.

kkk
DkD_kDk​
k+1
​
(
0
≤
k≤
M)
Cp​
=
k
Lp≤kL_p\le kLp​≤k
kk
k
k
​
Ek​−(N−Bk​)
​
)
k
​
O(1)O(1)O(1)