結果

問題 No.281 門松と魔法(1)
ユーザー lam6er
提出日時 2025-04-16 00:08:24
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 2,594 bytes
コンパイル時間 183 ms
コンパイル使用メモリ 82,264 KB
実行使用メモリ 53,832 KB
最終ジャッジ日時 2025-04-16 00:09:33
合計ジャッジ時間 3,807 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 55 WA * 2
権限があれば一括ダウンロードができます

ソースコード

diff #

d = int(input())
H = [int(input()) for _ in range(3)]
h1, h2, h3 = H

def solve_case1(d, h1, h2, h3):
    min_steps = float('inf')
    # Try up to 200 steps for k2
    for k2 in range(200):
        H2_prime = h2 - k2 * d
        if H2_prime <= 0:
            break
        # Compute k1_min
        target = H2_prime - 1
        if h1 > target:
            numerator = h1 - target
            k1_min = (numerator + d - 1) // d
        else:
            k1_min = 0
        H1_prime = max(0, h1 - k1_min * d)
        # Compute k3_min
        if h3 > target:
            numerator = h3 - target
            k3_min = (numerator + d - 1) // d
        else:
            k3_min = 0
        H3_prime = max(0, h3 - k3_min * d)
        # Check conditions
        if H1_prime >= H2_prime or H3_prime >= H2_prime:
            continue
        if H1_prime != H3_prime:
            current = k2 + k1_min + k3_min
            if current < min_steps:
                min_steps = current
        else:
            if H1_prime == 0:
                continue
            else:
                current = k2 + k1_min + k3_min + 1
                if current < min_steps:
                    min_steps = current
    return min_steps if min_steps != float('inf') else -1

def solve_case2(d, h1, h2, h3):
    min_steps = float('inf')
    # Try up to 200 steps for k2
    for k2 in range(200):
        H2_prime = h2 - k2 * d
        if H2_prime < 0:
            H2_prime = 0
        required = H2_prime + 1
        if h1 < required or h3 < required:
            continue
        if h1 != h3:
            current = k2
            if current < min_steps:
                min_steps = current
        else:
            # Check if we can apply one step to either
            if (h1 - d) >= required:
                current = k2 + 1
                if current < min_steps:
                    min_steps = current
            elif (h3 - d) >= required:
                current = k2 + 1
                if current < min_steps:
                    min_steps = current
    return min_steps if min_steps != float('inf') else -1

if d == 0:
    # Check if already valid
    if h1 != h2 and h2 != h3 and h1 != h3:
        if (h2 == max(H) or h2 == min(H)) and (h1 < h2 > h3 or h1 > h2 < h3):
            print(0)
        else:
            print(-1)
    else:
        print(-1)
else:
    case1 = solve_case1(d, h1, h2, h3)
    case2 = solve_case2(d, h1, h2, h3)
    res = []
    if case1 != -1:
        res.append(case1)
    if case2 != -1:
        res.append(case2)
    if not res:
        print(-1)
    else:
        print(min(res))
0