PNUPC 1K9

시간 제한1초메모리 제한1024 MB

요약
36진수 문자열 s의 일부 자릿값을 바꿔 s를 p로 나눈 나머지가 k가 되도록 할 때, 바꾸는 자릿수의 최솟값을 구한다.
난이도

보통10점 중 6점

유형
동적 계획법, 정수론, 수학
정답자
아직 제출이 없습니다

문제

1010진수는 00에서 99까지 숫자를 사용해 수를 나타내지만 진법에 따라서 알파벳을 사용하기도 한다. 예를 들어 1616진수는 A부터 F까지 6개의 알파벳을 1010부터 1515까지 나타내는 데 사용해 수를 표기할 수 있다. 1010진수 95는 1616진수로 5F와 같이 표기할 수 있다. 3636진수는 A부터 Z까지 26개의 알파벳을 1010부터 3535까지 나타내는 데 사용해 수를 표기할 수 있다. 1010진수 71은 3636진수 1Z와 같이 표기할 수 있다.

 3636진수로 표기된 양의 정수 ss와 1010진수로 표기된 양의 정수 kk, pp가 주어질 때 ss의 자릿값을 수정해 s≡k(modp)s \equiv k \pmod {p}가 성립하도록 해 보자. 자릿값을 수정할 때 길이를 늘이거나 줄일 수 없으나 가장 큰자리 숫자를 00으로 수정할 수도 있다.

입력

첫 번째 줄에 36진수로 표기된 양의 정수 ss가 주어진다. (1≤s<36100,0001 \leq s < 36^{100 \\, 000})

두 번째 줄에 10진수로 표기된 양의 정수 kk, pp가 공백으로 구분되어 주어진다. (0≤k<p≤1,0000 \leq k < p \leq 1\\, 000)

출력

s≡k(modp)s \equiv k \pmod {p}를 만족하게 하는 최소 수정 횟수를 출력한다. 만약 어떤 방법으로도 만족하게 할 수 없다면 대신 -1을 출력한다.

힌트

36진수 1K9는 10진수로 2025(1×362+K×36+9)(1 \times 36^2 + K \times 36 + 9)이다.

예제3

  1. 예제 1

    입력
    8W
    1 5
    
    예상 출력
    1
    
  2. 예제 2

    입력
    85
    5 16
    
    예상 출력
    0
    
  3. 예제 3

    입력
    1
    36 37
    
    예상 출력
    -1