시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 (추가 시간 없음) | 512 MB | 40 | 21 | 19 | 76.000% |
길이가 n인 문자열 S를 아래 조건에 따라 k개의 부분문자열 (substring) T1, T2, ..., Tk로 쪼개는 경우를 생각해보자:
예를 들어 S = "FED" 인 경우 아래와 같은 총 4가지의 방법으로 쪼갤 수 있다:
참고로 길이가 n인 문자열을 위 조건대로 쪼개는 방법은 총 2n-1 가지 존재한다.
이 문제에서는 원래의 문자열 S가 0-9와 A-F로만 구성된 16진수라 가정한다.
Albert는 위 조건대로 S를 쪼개서 T1, T2, ..., Tk가 비감소수열이 (non-decreasing sequence) 되는 경우가 몇 가지나 되는지 알고 싶다.
구체적으로, Albert는 S를 쪼갠 후 각 부분 문자열이 타나내는 16진수 값이 T1 ≤ T2 ≤ ... ≤ Tk 를 만족하도록 하고 싶다.
위 예제의 경우, 상기한 네 가지 방법을 통해 만들어지는 수열은 아래와 같다:
이 경우 비감소수열은 방법1, 방법2을 통해 얻을 수 있으므로 답이 2가 된다.
다른 예로 S = "0070"인 경우, 아래와 같은 4가지 방법이 가능하다.
방법1, 방법3, 방법4에서 보이듯 부분 문자열이 선행 0을 (leading zero) 포함하는 것도 허용된다.
입력으로 16진수 문자열 S가 주어졌을 때, Albert가 몇 가지 방법으로 S를 부분 문자열로 쪼개서 비감소수열을 얻을 수 있는지 구해보자.
첫 줄에 테스트 케이스의 수 T가 주어진다.
다음 각 줄에 문자열 S가 주어진다.
문자열 S를 구성하는 문자는 16진법에 사용되는 0-9 (숫자)와 A-F (영대문자) 뿐이다.
각 테스트 케이스의 정답을 각 줄에 출력한다.
4 0070 FED 42 002021
4 2 1 12
예제 1: 본문에서 다루었다.
예제 2: 본문에서 다루었다.
예제 3: [42]가 유일한 방법이다.
예제 4: 추가 설명 없음.