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

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

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

Weird Decimal 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​
)
​
)