【競プロ典型90問】「024 - Select +/- One(★2)」解法

このシリーズではE869120さんによって作成された競プロ典型90問をPythonで解いています。

問題

024 - Select +/- One(★2)

ポイント

答えがYesとなるためには、次の条件を満たす必要があります。

①最低限必要な操作回数がK回以下

②最低限必要な回数操作をした後の残り回数(K- 最低限必要な回数操作 )が偶数

①について、 AをBに一致させるために最低限必要な操作回数は各項の差異 | Bi - Ai | の合計と同じです。

必要な操作回数がK回を超える場合、当然AをBに一致させることはできません。

②について、最低限必要な回数の操作を行った場合、残りの回数が偶数であれば操作を行っても数列の

状態を変えずに維持することができます。(同じ項に-1,+1の操作を繰り返し行う)

逆に奇数であれば数列の状態は変わってしまいます。

以上より、下記の手順で解答を求めていきます。

Ⅰ. 最低限必要な操作回数( 各項の差異 | Bi - Ai | の合計 )を求める

Ⅱ. 操作回数がK回を超えないか判定

Ⅲ. 残りの回数が偶数であるか判定

コード

def main():
    import sys
    sys.setrecursionlimit(10 ** 9)
    input = sys.stdin.readline

    N, K = map(int, input().split(" "))
    A = list(map(int, input().split(" ")))
    B = list(map(int, input().split(" ")))

    # Ⅰ. 最低限必要な操作回数( 各項の差異 | Bi - Ai | の合計 )を求める
    need = 0
    for i in range(len(A)):
        if A[i] == B[i]:
            continue
        else:
            distance = abs(B[i] - A[i])
            need += distance
            
    #  Ⅱ. 操作回数がK回を超えないか判定
    #  Ⅲ. 残りの回数が偶数であるか判定
    print('Yes' if need <= K and (K - need) % 2 == 0 else 'No')


if __name__ == '__main__':
    main()

おすすめの記事