このシリーズではE869120さんによって作成された競プロ典型90問をPythonで解いています。
問題
ポイント
答えが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()