B. GCD Length | Edu Round 107 Div.2

LONGNEW·2021년 7월 21일
0

CP

목록 보기
51/155

https://codeforces.com/contest/1511/problem/B
시간 2초, 메모리 256MB

input :

  • t (1 ≤ t ≤ 285)
  • a b c (1 ≤ a,b ≤ 9, 1 ≤ c ≤ min(a,b))

output :

  • For each testcase print two positive integers — x and y (x > 0, y > 0)
    각 테스트케이스에서 x, y 두 정수를 찾아 출력하시오.

조건 :

  • the decimal representation of x without leading zeroes consists of a digits;
    the decimal representation of y without leading zeroes consists of b digits;
    the decimal representation of gcd(x,y) without leading zeroes consists of c digits.
    0으로 시작하지 않는 a개의 숫자를 가진 x, 0으로 시작하지 않는 b개의 숫자를 가진 y, gcd(x, y)한 결과 값이 0으로 시작하지 않고 c개의 숫자를 가진 것. 을 만족하는 x, y를 출력

두 숫자를 임의로 결정 지어야 한다.
두 숫자를 일단 연관을 지으려면 어떻게 해야 할까??

최소 공약수를 찾는 것이기 때문에 x, y가 일단 배수 관계를 가지고 있다면 둘 중 작은 값이 최대 공약수가 될 수 있을 것이다.

5 4 2와 같은 입력이 있을 때 x, y 숫자를 10의 배수로 구성하고 싶으면
10000, 1000 으로 만들 수 있다. 이 둘의 최대 공약수는 1000이 되며 내가 원하는 최대공약수를 만들고 싶다면

여기에 1, 10, 100을 추가로 더해 준다면 그 값을 최대 공약수로 얻을 수 있다.
그러니까 10의 배수들로 구성을 하게 해서 마지막에 x, y 둘 중 작은 값에 다가 원하는 최대공약수 크기만큼의 10의 배수를 더하는 것이다.

import sys
import math

t = int(sys.stdin.readline())
for _ in range(t):
    a, b, c = map(int, sys.stdin.readline().split())

    if a == 1 and b == 1 and c == 1:
        print(f"1 1")
        continue

    x = int(math.pow(10, a - 1))
    y = int(math.pow(10, b - 1))
    z = int(math.pow(10, c - 1))

    if x > z:
        print(f"{x + z} {y}")
    else:
        print(f"{x} {y + z}")

0개의 댓글