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

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

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

67

問題に戻る

解説

m=6m=6m=6과 m=7m=7m=7에 대해 각각 동적 계획법을 수행한다. dpm[r]dp_m[r]dpm​[r]를 현재까지 본 문자에서 만들 수 있는, mmm으로 나눈 나머지가 rrr인 비어 있지 않은 부분수열의 최대 길이로 둔다. 만들 수 없다면 000으로 둔다.

다음 숫자 ddd를 볼 때는 그 문자를 버리거나, 길이 111인 새 수로 시작하거나, 기존 부분수열 뒤에 붙일 수 있다. 기존 나머지가 rrr이면 새 나머지는 (10r+d) mod m(10r+d)\bmod m(10r+d)mod이다. 전이에는 문자를 보기 전의 상태만 사용한다.

모든 문자를 처리한 뒤 L=max⁡(dp6[0],dp7[0])L=\max(dp_6[0],dp_7[0])L=max(dp6​[0],dp7​[0])을 구한다. 이면 을 출력하고, 그렇지 않으면 을 출력한다. 한 케이스의 시간 복잡도는 이고, 문자열을 저장하는 공간을 제외한 추가 공간 복잡도는 이다.

증명

처음에는 비어 있지 않은 부분수열을 만들 수 없으므로 모든 상태가 000이다. 다음 문자를 처리할 때 가능한 부분수열은 그 문자를 쓰지 않은 것, 그 문자만 쓴 것, 이전 부분수열 뒤에 붙인 것 중 하나이다. 전이는 이 세 경우의 최대 길이를 정확히 계산하므로 각 상태는 정의한 최대 길이를 갖는다.

조건을 만족하는 수는 666 또는 777로 나눈 나머지가 000이다. 따라서 LLL은 남길 수 있는 문자의 최대 개수이고, N−LN-L은 삭제할 문자의 최소 개수이다. 이면 조건을 만족하는 비어 있지 않은 부분수열이 없다.

서브태스크 1은 모든 비어 있지 않은 부분수열을 조사하는 O(N2N)O(N2^N)O(N2N) 풀이로 해결할 수 있다. 서브태스크 2는 마지막으로 고른 문자의 위치와 나머지를 상태로 두고, 앞선 모든 위치에서 전이하는 O(N2)O(N^2)O(N2) 풀이로 해결할 수 있다. 전체 조건에서는 같은 나머지를 갖는 상태 중 최대 길이만 유지한다.

Solution written by GPT6

m
L=0L=0
L=0
−1-1−1
N−LN-LN−L
O(N)O(N)O(N)
O(1)O(1)O(1)
N
−
L
L=0L=0L=0