핵심 아이디어

<aside> 💡

극적인 수를 $x$라고 하면

$\lfloor x/10 \rfloor + k\lfloor \log x\rfloor = nx$

이때 $x$의 $1$의 자리가 항상 $k$로 고정이므로

$x-k + 10k\lfloor \log x\rfloor = 10nx$ 으로 변형 가능

$(10n-1)x = k(10\lfloor \log x\rfloor-1)$를 만족하는 가장 작은 $x$를 찾으면 된다.

이때 어떤 $\lfloor \log x\rfloor$에 대해서 $x$가 존재한다면 $x$는 반드시 하나다. 따라서 $\lfloor \log x\rfloor$에 대해서 브루트포스를 하면 된다.

</aside>

수의 범위가 커서 Big Integer를 지원하는 python을 사용했다.

아직 C++에서 Big Integer를 구현하는 법을 모른다..


코드

import sys

def main():
    input = sys.stdin.readline
    n, k = map(int, input().split())

    cur = 10
    b = 10 * n - 1

    for lg in range(201):
        a = (cur - 1) * k

        if a % b != 0:
            cur *= 10
            continue

        x = a // b

        if lg != len(str(x)) - 1:
            cur *= 10
            continue

        print(x)
        return

    print(0)

if __name__ == "__main__":
    main()


Big Integer없이 해결 가능하다고 한다.