B. Make AP | Round #764 Div.3

LONGNEW·2022년 1월 11일
0

CP

목록 보기
100/155

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

input :

  • t (1 ≤ t ≤ 104)
  • a b c (1 ≤ a, b, c ≤ 10^8).

output :

  • if Polycarp can choose a positive integer m and multiply exactly one of the integers a, b or c by m to make [a,b,c] be an arithmetic progression then print "YES". Print "NO" (without quotes) otherwise.
    임의의 m을 골라 a, b, c 중 하나에 곱해 [a, b, c]를 등차수열로 만들 수 있다면 "YES"를 그렇지 않으면 "NO"를 출력하시오.

조건 :

  • an arithmetic progression (AP) if there exists a number d (called "common difference") such that xi + 1 = xi + d
    arithmetic progression == 등차수열.

  • Choose a positive integer m and multiply exactly one of the integers a, b or c by m.
    임의의 숫자 m을 고르고 a, b, c 중 하나에 곱할 수 있다.


등차수열을 생각하고 바로 식을 만들어 생각을 해야 했는데 괜히 다른 길로 자꾸 빠졌다.

다음 풀이

  1. arithmetic progression
  2. 공차를 계산
  3. b에다가 m을 곱하는 경우

등차수열 이라는 점을 빠르게 인지를 한다면 접근을 바로 할 수 있다.
오름차순, 내림차순 두 개의 수열을 만든다 생각을 하고 해당하는 수를 만들 수 있는지 확인을 한다.
그렇지 않은 경우 b * m을 해서 등차의 경우를 만들어야 한다.
예외적인 상황으로 [1 1 1]과 같은 것을 예외처리 해야 한다.

마지막 예외처리로 (a + c) / 2 != b를 만족해야 한다.

import sys

t = int(sys.stdin.readline())

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

    d = b - a
    if (2 * b - a) % c == 0 and (2 * b - a) > 0:
        print("YES")
        continue

    d = b - c
    if (2 * b - c) % a == 0 and (2 * b - c) > 0:
        print("YES")
        continue

    total = a + c
    if (total / 2) % b == 0 and total / 2 != b:
        print("YES")
        continue
    print("NO")

0개의 댓글