結果

問題 No.859 路線A、路線B、路線C
ユーザー matsu7874matsu7874
提出日時 2019-08-08 20:47:52
言語 Python3
(3.12.2 + numpy 1.26.4 + scipy 1.12.0)
結果
AC  
実行時間 106 ms / 1,000 ms
コード長 2,168 bytes
コンパイル時間 210 ms
コンパイル使用メモリ 12,672 KB
実行使用メモリ 15,912 KB
最終ジャッジ日時 2024-07-18 20:56:36
合計ジャッジ時間 2,240 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 106 ms
15,656 KB
testcase_01 AC 97 ms
15,788 KB
testcase_02 AC 96 ms
15,912 KB
testcase_03 AC 100 ms
15,788 KB
testcase_04 AC 101 ms
15,656 KB
testcase_05 AC 100 ms
15,788 KB
testcase_06 AC 100 ms
15,784 KB
testcase_07 AC 98 ms
15,788 KB
testcase_08 AC 96 ms
15,656 KB
testcase_09 AC 96 ms
15,784 KB
testcase_10 AC 100 ms
15,660 KB
testcase_11 AC 97 ms
15,784 KB
testcase_12 AC 102 ms
15,784 KB
testcase_13 AC 98 ms
15,788 KB
testcase_14 AC 100 ms
15,780 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import unittest


def check_constants(x, y, z, s0, t0, s1, t1):
    assert 1 <= x <= 10**9
    assert 1 <= y <= 10**9
    assert 1 <= z <= 10 ** 9
    if s0 == 'A':
        assert 1 <= t0 <= x
    elif s0 == 'B':
        assert 1 <= t0 <= y
    elif s0 == 'C':
        assert 1 <= t0 <= z
    else:
        assert False, 'unreachable'
    if s1 == 'A':
        assert 1 <= t1 <= x
    elif s1 == 'B':
        assert 1 <= t1 <= y
    elif s1 == 'C':
        assert 1 <= t1 <= z
    else:
        assert False, 'unreachable'
    assert s0 != s1 or t0 != t1


def get_route_length(route, x, y, z):
    if route == 'A':
        return x
    elif route == 'B':
        return y
    else:
        return z


def solve(x, y, z, s0, t0, s1, t1):
    min_cost = float('inf')
    if s0 == s1:
        if t0 > t1:
            t0, t1 = t1, t0
        min_cost = min(
            t1 - t0,
            t0 + min(x, y, z) + get_route_length(s1, x, y, z) - t1
        )
    else:
        min_cost = min(
            t0 + t1 - 1,
            get_route_length(s0, x, y, z) - t0 +
            get_route_length(s1, x, y, z) - t1 + 1,
            t0 + min(x, y, z) + get_route_length(s1, x, y, z) - t1,
            t1 + min(x, y, z) + get_route_length(s0, x, y, z) - t0,
        )
    return min_cost


def main():
    x, y, z = map(int, input().split())
    s0, t0 = input().split()
    s1, t1 = input().split()
    t0 = int(t0)
    t1 = int(t1)
    check_constants(x, y, z, s0, t0, s1, t1)
    result = solve(x, y, z, s0, t0, s1, t1)
    print(result)


class Test3084(unittest.TestCase):
    def test3084(self):
        self.assertEqual(solve(3, 4, 5, 'A', 1, 'B', 1), 1)
        self.assertEqual(solve(3, 4, 5, 'C', 5, 'C', 2), 3)
        self.assertEqual(solve(5, 1, 5, 'A', 1, 'C', 5), 2)
        self.assertEqual(solve(10, 100, 1000, 'A', 1, 'C', 5), 5)
        self.assertEqual(solve(10, 100, 1000, 'A', 1, 'C', 995), 15)
        self.assertEqual(solve(10, 1, 1000, 'A', 10, 'C', 5), 6)
        self.assertEqual(solve(10, 1, 1000, 'A', 1, 'C', 995), 7)
        self.assertEqual(solve(10, 1, 1000, 'C', 1, 'C', 1000), 2)


if __name__ == "__main__":
    # unittest.main()
    main()
0