結果

問題 No.550 夏休みの思い出(1)
ユーザー lam6er
提出日時 2025-03-20 20:53:16
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 65 ms / 2,000 ms
コード長 1,396 bytes
コンパイル時間 173 ms
コンパイル使用メモリ 82,648 KB
実行使用メモリ 62,500 KB
最終ジャッジ日時 2025-03-20 20:54:10
合計ジャッジ時間 4,632 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 55
権限があれば一括ダウンロードができます

ソースコード

diff #

import math

def find_roots(A, B, C):
    if C == 0:
        roots = [0]
        D = A * A - 4 * B
        if D >= 0:
            sqrtD = int(math.isqrt(D))
            if sqrtD * sqrtD == D:
                x1 = (-A - sqrtD) // 2
                x2 = (-A + sqrtD) // 2
                roots.extend([x1, x2])
        roots = sorted(list(set(roots)))
        return roots[:3] if len(roots) > 3 else roots

    def possible_p(C_val):
        k = abs(C_val)
        if k == 0:
            yield 0
            return
        max_i = int(math.isqrt(k)) + 1
        seen = set()
        for i in range(1, max_i + 1):
            if k % i == 0:
                for d in (i, k // i):
                    if d not in seen:
                        seen.add(d)
                        if d <= 1e9:
                            yield d
                            yield -d

    p_found = None
    for p in possible_p(C):
        if p**3 + A * p**2 + B * p + C == 0:
            p_found = p
            break

    d = A + p_found
    e = (B + p_found * d)
    D = d * d - 4 * e
    if D < 0:
        return []
    sqrtD = int(math.isqrt(D))
    if sqrtD * sqrtD != D:
        return []
    x1 = (-d - sqrtD) // 2
    x2 = (-d + sqrtD) // 2
    roots = [p_found, x1, x2]
    roots = sorted(roots)
    return roots

A, B, C = map(int, input().split())
roots = find_roots(A, B, C)
print(' '.join(map(str, roots)))
0