結果

問題 No.1150 シュークリームゲーム(Easy)
ユーザー smallcopse
提出日時 2020-08-07 22:38:08
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
AC  
実行時間 66 ms / 2,000 ms
コード長 1,131 bytes
コンパイル時間 416 ms
コンパイル使用メモリ 12,672 KB
実行使用メモリ 21,744 KB
最終ジャッジ日時 2024-09-24 22:50:34
合計ジャッジ時間 4,087 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 43
権限があれば一括ダウンロードができます

ソースコード

diff #

def main():
    N = int(input())
    s, t = map(int, input().split())
    A = list(map(int, input().split()))

    # 分かりやすいように、s < tで考える
    if t < s:
        A = A[::-1]
        s = N - s + 1
        t = N - t + 1

    s -= 1
    t -= 1
    X = A[s]
    Y = A[t]
    # print(X, Y)

    # 残り部分その1
    A1 = A[s+1:t]
    # 残り部分その2
    A2 = A[t+1:] + A[:s]
    A2 = A2[::-1]
    N1 = len(A1)
    N2 = len(A2)
    # print(A1)
    # print(A2)
    # 最善を尽くした場合、残り部分を半分ずつ取り合うしかない
    # ただし、残り部分が両方とも奇数個の場合、中央の数が大きいほうを315側は取ろうとするはず

    X += sum(A1[:N1//2]) + sum(A2[:N2//2])
    Y += sum(A1[N1-(N1//2):]) + sum(A2[N2-(N2//2):])
    # print(X, Y)

    rest = []
    if N1 % 2 == 1:
        rest.append(A1[N1 // 2])
    if N2 % 2 == 1:
        rest.append(A2[N2 // 2])
    rest.sort()
    if len(rest) >= 1:
        X += rest[-1]
    if len(rest) == 2:
        Y += rest[0]

    # print(X, Y)
    print(X - Y)
    

if __name__ == '__main__':
    main()
0