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

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

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

Deletion 2

問題に戻る

解説

최종 문자열에는 서로 다른 두 이웃 문자가 없다. 따라서 최종 문자열은 빈 문자열이거나 한 종류의 문자만으로 이루어진다.

Lemma 1. 길이가 mmm인 문자열 WWW를 전부 지울 수 있는 필요충분조건은 mmm이 짝수이고, 각 문자의 등장 횟수가 m/2m/2m/2 이하인 것이다.

Proof

한 문자를 지울 때마다 다른 문자 하나도 함께 지워야 하므로 필요조건은 자명하다.

충분성은 mmm에 대한 귀납법으로 보인다. 어떤 문자가 정확히 m/2m/2m/2번 등장하면 그 문자와 다른 문자가 만나는 경계의 두 문자를 지운다. 모든 문자가 m/2m/2m/2번보다 적게 등장하면 서로 다른 아무 이웃 두 문자를 지운다. 두 경우 모두 남은 문자열은 같은 조건을 만족한다.

문자 XXX를 하나 고정하고, 최종 문자열이 XXX만으로 이루어지는 경우를 생각하자. 나머지 두 문자를 Y,ZY,ZY,Z라 하자.

남겨 둘 XXX의 위치를 고르면, 그 사이와 양 끝의 구간은 모두 사라져야 한다.

Lemma 2. 각 구간에서 Y,ZY,ZY,Z의 등장 횟수가 각각 구간 길이의 절반 이하라는 조건만 요구해도, 남길 수 있는 의 최대 개수는 변하지 않는다.

Proof

실제로 전부 지울 수 있는 구간은 Lemma 1에 의해 이 조건을 만족한다.

반대로 이 조건을 만족하는 구간에서 XXX도 절반 이하라면 Lemma 1에 의해 구간 전체를 지울 수 있다. XXX가 절반보다 많다면 모든 Y,ZY,ZY,Z를 XXX와 하나씩 지울 수 있으므로, 그 구간에는 XXX만 남는다.

따라서 이 조건 아래에서 개의 를 남길 수 있다면 실제 연산으로도 적어도 개의 를 남길 수 있다. 그러므로 최대값은 변하지 않는다.

이 최대값을 MXM_XMX​라 하자.

S[1…i]S[1\ldots i]S[1…i]에서 Y,ZY,ZY,Z의 등장 횟수를 각각 Yi라 하고, 인 위치 에 대해 , 를 정의한다.

Proof

S[1…i]S[1\ldots i]S[1…i]의 XXX의 개수를 XiX_iXi​라 하면 ui+vi이다.

Lemma 3에 의해 인덱스 조건은 필요 없다. 점들을 uuu 순서로 처리하면서 vvv에 대한 dominance 최댓값을 Fenwick Tree로 관리하면 MXM_XMX​를 O(Nlog⁡N)O(N\log N)O(Nlog에 구할 수 있다. 홀짝이 다른 점에서만 전이하도록 두 경우를 따로 관리한다.

Proof

XkX^kXk가 가능하고 k>LXk>L_Xk>LX​라고 하자. 최종적으로 남은 kkk개의 사이와 양 끝의, 모두 지워진 구간을 라 하자.

따라서 MX>0M_X>0MX​>0일 때 XXX만으로 이루어진 최종 문자열의 개수는 (MX−LX)/2+1(M_X-L_X)/2+1(M이다.

XXX
kk
k
XXX
kkk
XXX
,ZiY_i,Z_i
Yi​,Zi​
Si=XS_i=XSi​=X
iii
ui=i−2Ziu_i=i-2Z_iui​=i−2Zi​
vi=i−2Yiv_i=i-2Y_ivi​=i−2Yi​

두 위치 j<ij<ij<i의 XXX를 연속해서 남길 수 있으려면 그 사이 구간이 Lemma 2의 조건을 만족해야 한다. 이는 정확히 uj<uiu_j<u_iuj​<ui​, vj<viv_j<v_ivj​<vi​, j≢i(mod2)j\not\equiv i\pmod 2j≡i(mod2)와 같다.

첫 번째로 남는 XXX의 위치 iii는 iii가 홀수이고 ui>0u_i>0ui​>0, vi>0v_i>0vi​>0이어야 한다. 또한 U=N−2ZNU=N-2Z_NU=N−2ZN​, V=N−2YNV=N-2Y_NV=N−2YN​라 하면 마지막으로 남는 XXX의 위치 iii는 i≡N(mod2)i\equiv N\pmod 2i≡N(mod2), ui≤Uu_i\le Uui​≤U, vi≤Vv_i\le Vvi​≤V를 만족해야 한다.

따라서 dpidp_idpi​를 위치 iii의 XXX를 마지막으로 남길 때 남는 XXX의 최대 개수라고 두면, 이전 위치 jjj는 j<ij<ij<i, uj<uiu_j<u_iuj​<ui​, vj<viv_j<v_ivj​<vi​를 만족하고 i,ji,ji,j의 홀짝이 달라야 한다. 이는 인덱스, uuu, vvv에 대한 3차원 dominance DP이므로 CDQ 분할 정복을 사용하면 O(Nlog⁡2N)O(N\log^2 N)O(Nlog2N)에 MXM_XMX​를 구할 수 있다.

Lemma 3. Si=XS_i=XSi​=X인 위치들만 보면, uj<uiu_j<u_iuj​<ui​와 vj<viv_j<v_ivj​<vi​가 성립할 때 항상 j<ij<ij<i이다.

=2Xiu_i+v_i=2X_i
ui​+vi​=2Xi​

XXX가 등장하는 위치만 보면 XiX_iXi​는 원래 위치 순서대로 엄격히 증가한다. 따라서 uj<uiu_j<u_iuj​<ui​와 vj<viv_j<v_ivj​<vi​이면 uj+vj<ui+viu_j+v_j<u_i+v_iuj​+vj​<ui​이고, 곧 Xj<XiX_j<X_iXj​<Xi​이므로 j<ij<ij<i이다.

N
)

이를 X=A,B,CX=\texttt{A},\texttt{B},\texttt{C}X=A,B,C 각각에 대해 수행한다.

이제 문자 XXX가 전체 문자열에 xxx번 등장한다고 하자. 최종 문자열이 XkX^kXk라면 연산 한 번마다 길이가 222씩 줄어드므로 k≡N(mod2)k\equiv N\pmod 2k≡N(mod2)이다. 또한 XXX 하나를 지우려면 XXX가 아닌 문자가 하나 필요하므로 k≥2x−Nk\ge 2x-Nk≥2x−N이다.

따라서 가능한 양의 길이의 최솟값은 NNN이 홀수이면 LX=max⁡(2x−N,1)L_X=\max(2x-N,1)LX​=max(2x−N,1), NNN이 짝수이면 LX=max⁡(2x−N,2)L_X=\max(2x-N,2)LX​=max(2x−N,2)이다.

Lemma 4. MX>0M_X>0MX​>0이면 가능한 길이는 정확히 LX,LX+2,…,MXL_X,L_X+2,\ldots,M_XLX​,LX​+2,…,MX​이다.

XXX
G0,G1,…,GkG_0,G_1,\ldots,G_kG0​,G1​,…,Gk​

GrG_rGr​의 길이를 mrm_rmr​, 그 안의 XXX의 개수를 xrx_rxr​라 하면 dr=mr/2−xrd_r=m_r/2-x_rdr​=mr​/2−xr​는 음이 아닌 정수이다. 또한 ∑dr=(N−2x+k)/2>0\sum d_r=(N-2x+k)/2>0∑dr​=(N−2x+k)/2>0이므로 어떤 drd_rdr​는 양수이다.

그 구간이 포함되도록 서로 이웃한 생존 XXX 두 개도 함께 지우면, 합쳐진 새 구간에서는 세 문자 모두 길이의 절반 이하로 등장한다. Lemma 1에 의해 새 구간 전체를 지울 수 있으므로 Xk−2X^{k-2}Xk−2도 가능하다.

이를 반복하면 LX,LX+2,…,MXL_X,L_X+2,\ldots,M_XLX​,LX​+2,…,MX​가 모두 가능하다.

X
​
−
LX​)/2+
1

빈 문자열은 Lemma 1에 의해 NNN이 짝수이고 2max⁡(#A,#B,#C)≤N2\max(\#A,\#B,\#C)\le N2max(#A,#B,#C)≤N일 때만 가능하다. 세 문자에 대한 개수를 더하고, 빈 문자열이 가능하면 111을 더하면 답이다.

따라서 전체 시간복잡도는 O(Nlog⁡N)O(N\log N)O(NlogN)이다.

Solution written by GPT6

+
vi​