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

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

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

이상한 십진법 XOR

문제로 돌아가기

해설

한 자리 숫자 ddd의 색을 빨강부터 차례대로 0,1,2,3,40,1,2,3,40,1,2,3,4로 번호 매기고 상태를 0,10,10,1로 나타내자. 다음 대응 fff를 사용한다.

(f(0),f(1),⋯ ,f(9))=(0,5,6,1,2,7,8,3,4,9).(f(0),f(1),\cdots,f(9))=(0,5,6,1,2,7,8,3,4,9).(f(0),f(1),⋯,f(9))=(0,5

f(d)f(d)f(d)는 다음 두 조건을 만족하는 000 이상 999 이하의 유일한 정수이다.

  • f(d) mod 5f(d)\bmod 5f(d)mod5는 ddd의 색 번호이다.
  • f(d) mod 2f(d)\bmod 2f(d)mod는 의 상태이다.

색의 합성은 색 번호의 덧셈 modulo 555이고, 상태의 XOR은 덧셈 modulo 222와 같다. 중국인의 나머지 정리에 의해

f(x⋄y)≡f(x)+f(y)(mod10)f(x\diamond y)\equiv f(x)+f(y)\pmod{10}f(x⋄y)≡f(x)+f(y)(mod10)

이 성립한다.

AiA_iAi​의 10j10^j10j 자리 숫자를 dj(Ai)d_j(A_i)dj라고 하자. 자리별 누적합을

Sij=∑k=1if(dj(Ak))(mod10),S0j=0S_i^j=\sum_{k=1}^{i} f(d_j(A_k))\pmod{10},\qquad S_0^j=0Sij​=k

으로 정의한다. 그러면 구간 [l,r][l,r][l,r]의 10j10^j10j 자리 결과가 000인 것과 Sl−1j=SrjS_{l-1}^j=S_r^jS인 것은 동치이다.

전체 결과가 000이려면 모든 십진 자리에서 동시에 이 조건을 만족해야 한다. 0≤Ai≤10180\le A_i\le10^{18}0≤Ai​≤1018이므로 필요한 자리는 j=0,1,⋯의 개뿐이다. 따라서

Si=(Si0,Si1,⋯ ,Si18)S_i=(S_i^0,S_i^1,\cdots,S_i^{18})Si​=(Si0​,S

라고 두면, 구간 [l,r][l,r][l,r]의 이상한 십진법 XOR가 000인 것과 Sl−1=SrS_{l-1}=S_rSl−1​=S인 것은 동치이다.

서브태스크 1

Ai≤9A_i\le9Ai​≤9이면 일의 자리만 0이 아닐 수 있다. 따라서 SiS_iSi​는 사실상 modulo 101010 값 하나뿐이다. 각 값 에 대해 누적 등장 횟수를 저장하면, 쿼리 에서는 접두사 위치 에 각 값이 몇 번 등장하는지 에 구할 수 있다. 어떤 값이 번 등장하면 같은 값을 고르는 위치 쌍은 개이므로 한 쿼리를 에 처리할 수 있다.

시간 복잡도는 O(N+10Q)O(N+10Q)O(N+10Q)이고 공간 복잡도는 O(10N)O(10N)O(10N)이다.

전체 제약

이제 SiS_iSi​는 길이 191919인 벡터이고 가능한 값의 전체 공간은 너무 크다. 하지만 실제로 등장하는 벡터는 S0,S1,⋯ ,SNS_0,S_1,\cdots,S_NS0​,뿐이다. 이 벡터들을 사전순으로 정렬하여 같은 벡터에 같은 정수 ID를 부여한다.

그러면 각 쿼리 [L,R][L,R][L,R]은 접두사 위치 구간 [L−1,R][L-1,R][L−1,R] 안에서 값이 같은 서로 다른 두 위치의 쌍의 개수를 묻는 문제가 된다.

이를 Mo's algorithm으로 오프라인 처리한다. 현재 구간에 ID vvv가 ccc개 들어 있을 때 새 원소 vvv를 추가하면 답이 ccc 증가한다. 원소 vvv를 제거할 때는 먼저 개수를 하나 줄인 뒤 남은 개수만큼 답을 감소시키면 된다.

벡터 생성은 O(19N)O(19N)O(19N), 좌표 압축은 O(19Nlog⁡N)O(19N\log N)O(19NlogN), Mo's algorithm은 O((N+Q)N)O((N+Q)\sqrt N)O((N+Q)에 동작한다. 따라서 전체 시간 복잡도는

O(19Nlog⁡N+(N+Q)N)O(19N\log N+(N+Q)\sqrt N)O(19NlogN+(N+Q)N

이고 공간 복잡도는 O(19N+Q)O(19N+Q)O(19N+Q)이다.

Solution written by GPT5.6

,
6
,
1
,
2
,
7
,
8
,
3
,
4
,
9
)
.
2
ddd
​
(
Ai​
)
=
1
∑
i
​
f
(
dj​
(
Ak​
))
(mod10),S0j​=
0
l−1j​
=
Srj​
 ,18j=0,1,\cdots,18
j=0,1,⋯,18
191919
i1
​
,
⋯
,
Si18​
)
r​
0,1,⋯ ,90,1,\cdots,9
0,1,⋯,9
[L,R][L,R][L,R]
L−1,L,⋯ ,RL-1,L,\cdots,RL−1,L,⋯,R
O(1)O(1)O(1)
ccc
(c2)\binom{c}{2}(2c​)
O(10)O(10)O(10)
S1​
,
⋯
,
SN​
N​
)
​
)