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

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

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

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