AtCoder上にある問題のうち、AtCoder Problemsでdiff 800以上と判定されているものを順番に解いていく企画。
基本的な考え方は全てコード中のコメントに入れてあるので、参照のこと。
出典:
CODE FESTIVAL 2017 qual A B- fLIP
行と列の中ではどこを反転しても同じなので、行と列をそれぞれいくつ反転するのかという数だけが問題になることに気づけば、すんなり解けると思う。
ただし、公式解説に書いてあるO(N)の解法は最初思いつかなかった。なるほどなあ、という感じである。
def main():
N, M, K = map(int, input().split())
for p in range(N+1):
for q in range(M+1):
if (M-q) * p + (N-p) * q == K:
result = 'Yes'
break
else:
continue
break
else:
result= 'No'
print(result)
main()
def main2():
N, M, K = map(int, input().split())
for n in range(N+1):
if N == n * 2:
if K == M * n:
print('Yes')
break
else:
q, r = divmod(K - M * n, N - n * 2)
if r == 0 and 0 <= q <= M:
print('Yes')
break
else:
print('No')
関連