<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없이 해결 가능하다고 한다.