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

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

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

Magic Contest

문제로 돌아가기

해설

길이가 mmm인 이진 문자열 XXX에 대해 다음 체크섬을 생각하자.

∑i=1miXi(modm+1)\sum_{i=1}^{m} iX_i\pmod{m+1}i=1∑m​iXi​(modm+1)

체크섬이 000인 문자열들의 집합은 하나의 삽입 또는 삭제를 교정하는 Varshamov--Tenengolts 부호이다.

원문 길이가 NNN일 때, 2r≥N+r+12^r\geq N+r+12r≥N+r+1을 만족하는 최소의 rrr을 고르고 로 둔다. 위치가 인 곳을 체크 비트로 비우고, 나머지 개 위치에 를 순서대로 넣는다.

데이터 비트가 만드는 체크섬을 aaa라 하자. q=(−a) mod (m+1)q=(-a)\bmod(m+1)q=(−a)mod(m+1)를 0≤q≤m0\leq q\leq m인 정수로 잡는다. 이므로 의 이진 표현을 체크 비트 위치에 넣을 수 있다. 그러면 완성된 문자열의 체크섬은 이다.

N≥3N\geq 3N≥3이고 N≤200 000N\leq 200\,000N≤200000이면 r≤18r\leq 18r≤18이고 m≤2Nm\leq 2Nm이다. 인 경우에는 각 비트를 두 번 반복한 문자열을 사용한다. 이 짧은 반복 부호도 삽입 하나를 교정할 수 있다. 따라서 앨리스는 항상 조건을 만족하고, 모든 에서 이므로 점을 얻는다.

밥이 받은 문자열의 길이는 m+1m+1m+1이다. 각 삭제 위치 jjj에 대해 그 문자를 삭제한 뒤의 체크섬을 계산하고, 체크섬이 000이 되는 위치를 찾는다. 삽입 하나를 교정하는 부호의 성질에 따라 복원되는 부호어는 유일하다. 모든 후보 체크섬은 가중 합과 접미사 1 개수를 이용해 전체 O(m)O(m)O(m)에 계산할 수 있다.

부호어를 복원한 뒤, 위치가 2의 거듭제곱이 아닌 문자만 순서대로 모으면 SSS를 얻는다.

각 실행의 시간 복잡도는 O(∑Ni)O(\sum N_i)O(∑Ni​)이고, 보조 공간 복잡도는 O(max⁡Ni)O(\max N_i)O(maxNi​)이다. 체크섬 계산에서 필요한 가장 큰 정수는 이므로 부호 있는 64비트 정수 범위 안에 있다.

Solution written by GPT5

m=N+rm=N+r
m=N+r
1,2,4,⋯ ,2r−11,2,4,\cdots,2^{r-1}1,2,4,⋯,2r−1
NNN
SSS
0
≤
q≤
m
q<2rq<2^rq<2r
qqq
000
≤
2N
N=1,2N=1,2N=1,2
NNN
M−N≤18M-N\leq 18M−N≤18
100100100
m(m+1)/2<2.1×1010m(m+1)/2<2.1\times 10^{10}
m(m+1)/2<2.1×1010