페이지를 불러오는 중…
해결한 사람
1
명
정답률
100.00
%
시간 제한
60000
ms
메모리 제한
1024
MB
십진 숫자로 이루어진 문자열 이 있다. 의 분할은 을 연속한 부분 문자열들로 나누어 만든다. 예를 들어, 이 0145217이라면 가능한 분할로 014 5 21 7와 0 14 52 17가 있다. 각 숫자는 정확히 하나의 부분 문자열에 사용되어야 하며, 각 부분 문자열은 비어 있지 않아야 한다. 에 개의 숫자가 있다면, 가능한 분할은 정확히 개이다.
양의 정수 이 주어질 때, 모든 연속한 두 부분 문자열의 쌍에 대해 이들이 진법으로 나타내는 정수 중 적어도 하나가 로 나누어떨어지면 의 분할을 로 나누어떨어진다고 한다. 이면, 위의 첫 번째 예시 분할은 014, 21, 7이 로 나누어떨어지는 정수를 나타내므로 나누어떨어진다. 두 번째 예시 분할은 52과 17이 연속한 부분 문자열이고 어느 쪽도 로 나누어떨어지는 정수를 나타내지 않으므로 나누어떨어지지 않는다. 0145217을 0145217로 분할하면 연속한 부분 문자열의 쌍이 없으므로 어떤 에 대해서도 나누어떨어진다.
과 이 주어질 때, 로 나누어떨어지는 의 분할이 몇 개인지 센다. 출력값은 매우 큰 수일 수 있으므로, 결과를 소수 ()로 나눈 나머지만 출력한다.
시간 제한: 60초. 메모리 제한: 1 GB. . .
은 의 길이이다.
은 의 길이이다.
입력의 첫 번째 줄에는 테스트 케이스의 수 가 주어진다. 이어서 개의 줄이 주어진다. 각 줄은 위에서 설명한 숫자 문자열 과 양의 정수 로 이루어진 하나의 테스트 케이스를 나타낸다.
각 테스트 케이스마다 Case #$x$: $y$을 포함하는 한 줄을 출력한다. 여기서 는 1부터 시작하는 테스트 케이스 번호이고, 은 로 나누어떨어지는 의 서로 다른 분할의 수를 소수 ()로 나눈 나머지이다.
3
0145217 7
100100 10
5555 12
Case #1: 16
Case #2: 30
Case #3: 1
예제 케이스 #1에서, 의 나누어떨어지는 분할 개는 모두 다음과 같다.
0145217,
0 145217,
0 14 5217,
0 14 5 217,
0 14 5 21 7,
0 14 521 7,
0 145 217,
0 145 21 7,
0 14521 7,
014 5217,
014 5 217,
014 5 21 7,
014 521 7,
0145 217,
0145 21 7, 그리고
014521 7.
예제 케이스 #2에서, 분할하는 방법은 총 가지이다. 연속한 두 부분 문자열이 로 나누어떨어지지 않게 하려면 둘 다 로 끝나지 않아야 한다. 그렇게 하는 유일한 가지 방법은 1 001 00와 1 001 0 0이므로, 의 나머지 개 분할은 로 나누어떨어진다.
예제 케이스 #3에서, 가능한 어떤 부분 문자열도 짝수를 나타내지 않으며, 따라서 로 나누어떨어지지 않는다. 그러므로 로 나누어떨어지지 않는 연속한 두 부분 문자열이 존재하지 않게 하는 유일한 방법은 연속한 두 부분 문자열 자체가 없게 하는 것이며, 이는 단 하나의 방법인 가지로만 가능하다: 5555.
Copyright Google LLC; sourced from the Google Coding Competitions Archive.
로그인 상태를 확인하는 중입니다.