結果

問題 No.3162 Five Two Three
ユーザー Kude
提出日時 2025-05-23 20:39:53
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 1,892 bytes
コンパイル時間 409 ms
コンパイル使用メモリ 82,712 KB
実行使用メモリ 54,800 KB
最終ジャッジ日時 2025-05-23 20:40:09
合計ジャッジ時間 14,718 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 97 WA * 90
権限があれば一括ダウンロードができます

ソースコード

diff #

x, y, z = map(int, input().split())
if x == y == z == 0:
    print(3)
    print(0, 0, 0)
    exit()
if x == z == 0:
    print(6)
    print(0, y, y, 0, y, y)
    exit()
if y == z == 0:
    print(6)
    print(x, x, 0, x, x, 0)
    exit()
if x == y == 0:
    print(4)
    print(0, z, z, 0)
    exit()

def f(a, z):
    s = 1, 0
    t = 0, 1
    bl = 0
    br = a
    i = 1
    ans = []
    if a == 0:
        s = 0
        t = 1
        i = 1
        while True:
            if t <= z:
                if t % z == 0:
                    b = t // z
                    res = [a, b]
                    j = 1
                    while j < i:
                        res.append(res[j-1] + res[j])
                        j += 1
                    ans.append(res)
            else:
                break
            s, t = t, s + t
            i += 1
        return ans
    while bl <= br:
        t0, t1 = t
        # a*t0+b*t1 = z
        if (z - a * t0) % t1 == 0:
            b = (z - a * t0) // t1
            if bl <= b <= br:
                res = [a, b]
                j = 1
                while j < i:
                    res.append(res[j-1] - res[j])
                    j += 1
                assert len(res) == j + 1 and res[j] == z
                ans.append(res)
        s, t = t, (s[0] - t[0], s[1] - t[1])
        i += 1
        if i % 2 == 0:
            t0 = t[0]
            t1 = -t[1]
            assert t0 > 0 and t1 > 0
            br = min(br, a * t0 // t1)
        else:
            t0 = -t[0]
            t1 = t[1]
            assert t0 > 0 and t1 > 0
            bl = max(bl, (a * t0 + t1 - 1) // t1)
    return ans
dl = f(x, z)
dr = f(y, z)
ans = None
for p in dl:
    for q in dr:
        if abs(p[-2] - q[-2]) == z and (ans is None or len(p) + len(q) - 1 < len(ans)):
            ans = p + q[-2::-1]
if not ans:
    print(-1)
else:
    print(len(ans))
    print(*ans)
0