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

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

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

Do Not Believe T's Story

返回题目

题解

이 문제는 복원할 후보 부분집합들을 미리 정하고, 주어진 집합 SSS에 포함되는 후보 하나의 번호를 보내는 부호화 문제로 볼 수 있다. 첫 번째 실행은 후보를 찾아 번호를 출력하고, 두 번째 실행은 그 번호로부터 원소들을 복원한다. 전체 범위의 크기를 N=1 000 000N=1\,000\,000N=1000000, 입력 집합의 크기를 K=10 000K=10\,000K=10000이라 하자. 이하에서는 입력값에서 111을 빼고 0,…,N−10,\ldots,N-10,…,N−1의 정수로 다룬다. 두 실행에서 동일하게 재현할 수 있는 순열 T=12T=12T=12개를 준비한다. 구현에서는 같은 배열을 고정된 시드로 차례대로 섞고, 각 결과를 복사하여 저장한다. 각 순열 ftf_tft​에 대해 SSS의 원소들을 변환하고, 전체 범위를 크기 B=400B=400B=400인 버킷으로 나눈다. 버킷 개수는

G=NB=2 500G=\frac NB=2\,500G=BN​=2500

이다. 변환된 값 yyy는 버킷 번호와 버킷 내부 위치

b=⌊yB⌋,p=y mod Bb=\left\lfloor\frac yB\right\rfloor,\qquad p=y\bmod Bb=⌊By​⌋,p=y

로 나타낼 수 있다. 어떤 버킷에 입력 원소가 999개 이상 들어 있다면, 그중 999개를 선택하여 전송을 시도한다. 선택한 내부 위치를

0≤p1<p2<⋯<p9<B0\le p_1<p_2<\cdots<p_9<B0≤p1​<p2​<⋯<

라 할 때, 조합 순위를

r=∑j=19(pjj)r=\sum_{j=1}^{9}\binom{p_j}{j}r=j=1∑9​(jp

로 정의한다. 이 식은 999개짜리 조합을

0,…,L−1,L=(4009)=659 797 329 990 167 6000,\ldots,L-1,\qquad L=\binom{400}{9} =659\,797\,329\,990\,167\,6000,…,L−1,L=(9400​

에 일대일로 대응시킨다. 순열 번호, 버킷 번호, 조합 순위를 모두 그대로 보내려면 TGLTG LTGL개의 코드가 필요하므로 646464비트 범위를 초과한다. 따라서 각 순열·버킷 쌍에서 전송 가능한 조합을 일부만 선택한다. 먼저 원소 하나를 그대로 전송하는 용도로 1,…,N1,\ldots,N1,…,N을 예약한다. 나머지 공간을 TGTGTG개의 순열·버킷 쌍에 나누어 할당하면, 각 쌍에서 사용할 수 있는 코드의 수는

A=⌊264−1−NTG⌋=614 891 469 123 618A= \left\lfloor \frac{2^{64}-1-N}{TG} \right\rfloor =614\,891\,469\,123\,618A=⌊TG264−1−N

이다. 순열 번호가 ttt, 버킷 번호가 bbb일 때

u=tG+bu=tG+bu=tG+b

로 두 정보를 합친다. 각 uuu에 대해 고정된 시드로 계수 αu,βu\alpha_u,\beta_uαu​,βu​를 생성하되,

1≤αu<L,gcd⁡(αu,L)=1,0≤βu<L1\le\alpha_u<L,\qquad \gcd(\alpha_u,L)=1,\qquad 0\le\beta_u<L1≤αu​<L,gcd(α

을 만족하도록 한다. 같은 uuu에서는 항상 같은 계수가 생성되므로 계수를 따로 전송할 필요는 없다. 조합 순위 rrr를

c=(αur+βu) mod Lc=(\alpha_u r+\beta_u)\bmod Lc=(αu​r+βu​)

로 변환하고, c<Ac<Ac<A인 경우에만 전송한다. 이 변환은 전송 가능한 조합들이 작은 조합 순위에만 몰리는 현상을 줄이기 위해 사용한다. 조건을 만족하는 조합을 찾으면

M=N+1+uA+cM=N+1+uA+cM=N+1+uA+c

를 출력한다. 전송값의 범위는

N+1≤M≤N+TGA≤264−1N+1\le M\le N+TG A\le2^{64}-1N+1≤M≤N+TGA≤264−

이므로 문제의 조건을 만족한다. 인코더는 순열들을 차례대로 적용하고, 각 버킷에서 가능한 999개짜리 조합들을 검사한다. 조합 검사 횟수에는 제한을 두지 않는다. 전송 가능한 조합을 발견하면 즉시 종료하고, 모든 순열과 후보 조합을 확인했는데도 찾지 못했다면 SSS의 원소 하나를 원래 값 그대로 출력한다. 두 번째 실행에서는 M≤NM\le NM≤N이면 원소 하나를 그대로 복원한다. 그렇지 않다면

u=⌊M−N−1A⌋,c=(M−N−1) mod Au=\left\lfloor\frac{M-N-1}{A}\right\rfloor,\qquad c=(M-N-1)\bmod Au=⌊AM−N−1​⌋

로 정보를 분리하고,

t=⌊uG⌋,b=u mod Gt=\left\lfloor\frac uG\right\rfloor,\qquad b=u\bmod Gt=⌊Gu​⌋,b=u

를 구한다. 같은 uuu에서 계수들을 다시 생성하면

r=αu−1(c−βu) mod Lr=\alpha_u^{-1}(c-\beta_u)\bmod Lr=αu−1​(c−βu

로 원래 조합 순위를 복원할 수 있다. 여기서 역원은 AAA가 아니라 LLL을 기준으로 계산한다. 조합 순위에서는 j=9j=9j=9부터 111까지 역순으로 위치를 복원한다. 현재 허용 범위에서

(pjj)≤r\binom{p_j}{j}\le r(jpj​​)≤r

인 가장 큰 pjp_jpj​를 선택하고, rrr에서 해당 값을 뺀다. 다음 위치는 방금 선택한 위치보다 작은 범위에서 찾는다. 복원한 위치에 버킷의 시작점 bBbBbB를 더하고 역순열 ft−1f_t^{-1}f을 적용하면 원래 원소들을 얻는다. 따라서 탐색에 성공하면 입력에 포함된 서로 다른 원소 개를, 실패하면 올바른 원소 하나를 복원한다. 성공 확률은 다음과 같이 근사할 수 있다. 공유 순열을 독립적인 균등 무작위 순열로 보고, 조합 순위의 아핀 변환을 균등 무작위 치환으로 근사한다. 특정 버킷에 들어가는 입력 원소의 수를 라 하면

Pr⁡(X=k)=(Bk)(N−BK−k)(NK),E[X]=KBN=4\Pr(X=k) = \frac{\binom{B}{k}\binom{N-B}{K-k}} {\binom NK}, \qquad \mathbb E[X]=\frac{KB}{N}=4Pr(X=k)=(

이다. 버킷에 원소가 kkk개 있으면 검사할 조합은

mk=(k9)m_k=\binom{k}{9}mk​=(9k​)

개이다. k<9k<9k<9이면 mk=0m_k=0mk​=0으로 둔다. 균등한 무작위 치환 모델에서 이 후보들이 모두 전송 조건을 만족하지 못할 확률은

(L−Amk)(Lmk)≈(1−p)mk,p=AL≈0.00093194\frac{\binom{L-A}{m_k}}{\binom{L}{m_k}} \approx(1-p)^{m_k}, \qquad p=\frac AL\approx0.00093194(mk​

이다. 따라서 특정 버킷에서 전송 가능한 조합을 하나 이상 찾을 확률은

q≈∑k=9B(Bk)(N−BK−k)(NK)(1−(1−p)(k9)).q\approx \sum_{k=9}^{B} \frac{\binom{B}{k}\binom{N-B}{K-k}}{\binom NK} \left(1-(1-p)^{\binom{k}{9}}\right).q≈k=9∑B

이를 수치적으로 계산하면

q≈0.0004094405q\approx0.0004094405q≈0.0004094405

이다. 버킷 사이의 의존성까지 무시하는 근사를 적용하면, 121212개의 순열에서 모두 실패할 확률은

(1−q)TG≈4.62×10−6(1-q)^{TG} \approx4.62\times10^{-6}(1−q)TG≈4.62×10−6

이다. 따라서 케이스 하나에서 999개를 복원하는 예상 성공률은 약

99.99954%\boxed{99.99954\%}99.99954%​

이다.

mod
B
p
9​
<
B
j
​
​
)
)
=
659797329990167600
​
⌋
=
614891469123618
u
​
,
L
)
=
1,0≤
βu​<
L
mod
L
1
,
c
=
(M−
N−
1)mod
A
mod
G
​
)
mod
L
t
−1
​
999
XXX
K
N
​
)
(kB​)(K−kN−B​)
​
,
E
[
X
]
=
NKB​=
4
L
​
)
(mk​L−A​)
​
≈
(1−
p)mk​,p=
LA​≈
0.00093194
​
(KN​)(kB​)(K−kN−B​)​
(1−(1−p)(9k​))
.