DOJ logoDOJ
問題
最近追加された問題保存した問題Workbooks
カテゴリDLCコンテストグループチーム掲示板
ランキング
正解数ランキングストリークランキングDOJ Powerランキング
提出状況
問題募集ログイン新規登録
DOJ logoDOJ

OI形式のサブタスク採点、Eloレーティング、Discord認証を備えたオンラインジャッジです。

問題
問題一覧カテゴリ
コミュニティ
コンテストランキング掲示板お知らせ外部のコンテストを開催するガイド
アカウント
ログイン新規登録ジャッジ状態
ポリシー
利用規約DLCの利用規則プライバシーAPI 文書言語ランタイムコンテストの順位報酬レーティングとパフォーマンス
© 2026 DOJ
All rights reserved
解説

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