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

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

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

二値数列とクエリ

問題に戻る

解説

説明では添字を 000 から N−1N-1N−1 までとし、すべての添字を NNN を法として解釈する。

同じ開始位置で操作を二回行うと打ち消し合う。したがって、位置 iii から始まる操作を奇数回使うかどうかを xi∈{0,1}x_i\in\{0,1\}xi​∈{0,1} とすればよい。

位置 iii を最終的に 0 にするための条件は

ai=⨁j=i−K+1ixja_i=\bigoplus_{j=i-K+1}^{i}x_jai​=j=i−K+1⨁i​

である。隣接する二つの式を XOR すると

xi⊕xi−K=Δi,Δi=ai⊕ai−1x_i\oplus x_{i-K}=\Delta_i,\qquad \Delta_i=a_i\oplus a_{i-1}xi​⊕xi−K​=

を得る。

d=gcd⁡(N,K)d=\gcd(N,K)d=gcd(N,K)、m=N/dm=N/dm=N/d、h=K/dh=K/dh=K/ とする。写像 は、添字を長さ のちょうど 個の巡回に分解する。

剰余類 rrr に対して

Pr=⨁i≡r(modd)aiP_r=\bigoplus_{i\equiv r\pmod d}a_iPr​=i≡r(modd)⨁

と定義する。一つの巡回に属する差分式をすべて XOR した値は Pr⊕Pr−1P_r\oplus P_{r-1}Pr​⊕Pr−1​ である。したがって差分式が矛盾なく解けるための必要十分条件は

P0=P1=⋯=Pd−1P_0=P_1=\cdots=P_{d-1}P0​=P1​=⋯=P

である。

一つの巡回を

vt=r+tK(modN),t=0,…,m−1v_t=r+tK\pmod N,\qquad t=0,\ldots,m-1vt​=r+tK(modN),

の順に並べる。canonical 解を

xv0=0,xvt=xvt−1⊕Δvt(t≥1)x_{v_0}=0,\qquad x_{v_t}=x_{v_{t-1}}\oplus\Delta_{v_t}\quad(t\ge1)xv0​​=0,x

とする。巡回 rrr に含まれる x=1x=1x=1 の個数を crc_rcr​ とする。

差分式だけを見ると、各巡回全体を反転する自由変数 yry_ryr​ が一つある。yr=0y_r=0yr​=0 のコストは crc_r、 のコストは である。よって差分式だけを満たす最小コストは

B=∑rmin⁡(cr,m−cr)B=\sum_r\min(c_r,m-c_r)B=r∑​min(cr​,m−c

である。

差分式は元の式同士の差しか使っていないため、元の式をもう一つ満たす必要がある。位置 000 の式に対して

E=a0⊕⨁j=−K+10xjE=a_0\oplus\bigoplus_{j=-K+1}^{0}x_jE=a0​⊕j=−K+1⨁0

とおく。必要なのは E=0E=0E=0 である。

長さ KKK の区間には、各剰余類からちょうど h=K/dh=K/dh=K/d 個の位置が含まれる。

hhh が偶数なら、巡回全体を反転しても EEE は変化しない。したがって E=1E=1E=1 なら不可能であり、E=0E=0E=0 なら答えは BBB である。

hhh が奇数なら、各 yry_ryr​ は EEE を一回反転するので

y0⊕y1⊕⋯⊕yd−1=Ey_0\oplus y_1\oplus\cdots\oplus y_{d-1}=Ey0​⊕y1​⊕⋯⊕y

が必要である。各巡回でコストが小さい側を

zr=[cr>m/2],Z=⨁rzrz_r=[c_r>m/2],\qquad Z=\bigoplus_r z_rzr​=[cr​>m/2],

とする。Z=EZ=EZ=E なら答えは BBB である。そうでなければ一つの巡回で反対側を選ぶ必要があり、追加コストは

min⁡r∣m−2cr∣\min_r|m-2c_r|rmin​∣m−2cr​∣

である。

クエリで apa_pap​ を反転すると、Δp\Delta_pΔp​ と Δp+1\Delta_{p+1}Δ だけが反転し、 だけが反転する。したがって である剰余類の個数を持てば、すべての が等しいかを で判定できる。

巡回内で Δvs\Delta_{v_s}Δvs​​ を反転すると、s≥1s\ge1s≥1 のとき canonical 解の

xvs,xvs+1,…,xvm−1x_{v_s},x_{v_{s+1}},\ldots,x_{v_{m-1}}xvs​​,xv

という suffix がすべて反転する。s=0s=0s=0 の Δv0\Delta_{v_0}Δv0​​ は巡回を閉じる整合条件にだけ使われるため、canonical 解自体は変化しない。

各巡回を巡回順に連結した長さ NNN の配列を作り、区間反転と区間内の 111 の個数を扱う lazy segment tree を用いる。各クエリでは suffix 反転は高々二回で、影響を受けた巡回の crc_rcr​ だけを再計算すればよい。

crc_rcr​ が変化するたびに、次を同時に管理する。

  • B=∑rmin⁡(cr,m−cr)B=\sum_r\min(c_r,m-c_r)B=∑r​min(cr​,m−c

EEE も毎回再計算する必要はない。Δu\Delta_uΔu​ を反転したときに変化する canonical suffix と、EEE に使う長さ KKK の区間との共通部分の個数の偶奇を impact[u]impact[u] として前計算する。巡回の先頭では である。位置 のクエリでは

E⊕=[p=0]⊕impact[p]⊕impact[p+1]E\mathrel{\oplus}=[p=0]\oplus impact[p]\oplus impact[p+1]E⊕=[p=0]⊕impact[p]⊕impact

と更新できる。

以上より各クエリの答えは次の通りである。

  • PrP_rPr​ がすべて等しくなければ -1。
  • hhh が偶数なら、E=1E=1E=1 のとき -1、そうでなければ BBB。
  • が奇数なら、。

各テストケースの前処理は O(Nlog⁡N)O(N\log N)O(NlogN)、各クエリは O(log⁡N)O(\log N)O(logN) である。全体の計算量は O((N+Q)log⁡N)O((N+Q)\log N)O((N+Q、メモリ使用量は である。

Solution written by GPT5.6

x
j​
Δ
i​
,
Δi​
=
ai​⊕
ai−1​
d
i↦i+Ki\mapsto i+Ki↦i+K
mmm
ddd
​
ai​
d−1
​
t
=
0,…,m−
1
vt​​
=
xvt−1​​⊕
Δvt​​(t≥
1)
cr​
yr=1y_r=1yr​=1
m−crm-c_rm−cr​
r​
)
​
xj​
d−1
​
=
E
Z
=
r⨁​zr​
p+1
​
Pp mod dP_{p\bmod d}Ppmodd​
Pr=1P_r=1Pr​=1
PrP_rPr​
O(1)O(1)O(1)
s+1
​
​
,
…
,
xvm−1​​
r​
)
  • Z=⨁r[cr>m/2]Z=\bigoplus_r[c_r>m/2]Z=⨁r​[cr​>m/2]
  • すべての ∣m−2cr∣|m-2c_r|∣m−2cr​∣ を入れた multiset
  • impact[u]
    impact[u]=0impact[u]=0impact[u]=0
    ppp
    [
    p
    +
    1]
    hh
    h
    B+[Z≠E]⋅min⁡r∣m−2cr∣B+[Z\ne E]\cdot\min_r|m-2c_r|B+[Z=E]⋅minr​∣m−2cr​∣
    )
    log
    N
    )
    O(N)O(N)O(N)