RiseOJ는 solved.ac와 제휴 관계가 없습니다. 티어 아이콘 © solved.ac. solved.ac
포럼
R00635

금지어를 피하는 문자열

Diamond IV 다이아몬드 IV
난이도
3s
시간 제한
256MB
메모리 제한
0
맞았습니다!!
0
제출 수
0.0%
정답률
레이팅

의견: 0

설명

앞에서부터 \(\sigma\)개의 소문자 알파벳(a, b, \(\dots\))만을 사용하여 길이 \(L\)인 문자열을 만들려 한다. 단, 금지어 목록에 있는 문자열 중 어느 것도 연속한 부분 문자열로 포함하지 않아야 한다.

이러한 '안전한' 문자열의 개수를 \(10^9 + 7\)로 나눈 나머지를 구하여라.

\(L\)이 매우 크므로 길이에 대한 단순 DP는 통과할 수 없다.

제약

\(1 \le \sigma \le 5\)

\(1 \le K \le 50\)

\(1 \le L \le 10^{18}\)

금지어 길이의 합 \(\le 60\)

입력 형식

첫 줄에 알파벳 크기 \(\sigma\), 금지어 개수 \(K\), 문자열 길이 \(L\)이 주어진다.

다음 \(K\)개의 줄에 각 금지어가 주어진다. 금지어는 첫 \(\sigma\)개의 소문자만 사용한다.

출력 형식

안전한 길이 \(L\) 문자열의 개수를 \(10^9+7\)로 나눈 나머지를 출력한다.

예제 1
입력
2 1 3
aa
출력
5
설명

길이 3, 알파벳 {a,b}, 금지어 aa. 전체 8개 중 aa를 포함하는 aaa, aab, baa를 빼면 aba, abb, bab, bba, bbb로 5개이다.

예제 2
입력
2 2 4
ab
ba
출력
2
설명

금지어 ab, ba를 모두 피하려면 인접한 두 글자가 달라선 안 된다. 따라서 aaaa, bbbb 두 개만 안전하다.

문제 정보

riseoj 작성

출처 Original

평가 및 의견

금지어를 피하는 문자열

개요
출제자 난이도 Diamond IV 다이아몬드 IV 의견 0 / 50 공개 집계 (커뮤니티 난이도, 주요 주제, 품질)는 의견이 충분히 모이면 공개됩니다.

Log in to rate problems.

개별 의견

아직 의견이 없습니다. 자격이 된다면 위 양식에서 가장 먼저 평가해 보세요.

풀이 제출

금지어를 피하는 문자열

게스트로 둘러보고 있습니다. 로그인하면 풀이를 제출하고 진행 상황을 확인할 수 있습니다. 로그인하고 제출하기
공개
C++20 Tab 들여쓰기 · Ctrl+/ 주석 토글 · Enter 자동 들여쓰기
1 1 1 0 공백: 4 · UTF-8