import numpy as np N, K = map(int, input().split()) A = np.array(list(map(int, input().split()))) B = np.array(list(map(int, input().split()))) diff = np.sum(np.abs(A - B)) if diff > K : print("No") else: if diff % 2 == K % 2: print("Yes") else: print("No")
実行時間:184ms
構造はシンプルでAとB、2つのリストの要素同士の差の絶対値の合計を求める。それが与えられたKよりも大きければ題意を満たさない。次に、Kの方が大きいときは求めた合計とKの偶奇が一致していれば題意を満たす。従ってこの時のみYesを出力する。
ただコードが冗長な感じは否めない。
def manual_abs(a,b): return abs(a - b) N,K = map(int,input().split()) A = list(map(int,input().split())) B = list(map(int,input().split())) sumAbs = sum(list(map(manual_abs, A,B))) result = sumAbs <= K and (K - sumAbs) % 2 == 0 print('Yes' if result else 'No')
引用:
Submission #41264770 - 競プロ典型 90 問
やっていることは同じだが非常にすっきりしている。ポイントとしてはわざわざnumpyモジュールを持ってきていないところと条件分岐をresultでまとめているところか。map関数への理解の低さも実感した。
N, K = map(int, input().split()) A = list(map(int, input().split())) B = list(map(int, input().split())) dif = 0 for a, b in zip(A, B): dif += abs(a - b) if K >= dif and K % 2 == dif % 2: print("Yes") else: print("No")
引用:
Submission #41323279 - 競プロ典型 90 問
こちらはもう少し私の書いたコードに近いか。それでも実行時間は27ms程度で十分早い。
前回に引き続き、算数レベルで工夫できるところがまだまだ多いと痛感した。確かに偶奇判定ももっと簡略化できる。