パナソニックプログラミングコンテスト2020
パナソニックプログラミングコンテスト2020解いた分だけまとめ。
B,C問題でコーナーケースにはまり、AB2完だった。
C問題時間内に解きたかったなぁ...
レートはなんとか上がった。あともう少し。
目次
A. Kth Term
問題文にある数列をそのままリストにして、k番目の要素を取り出す。
リストは0からカウントされるので、出力するのは num[k-1]
になる
ACしたコード
#coding:utf-8 k = int(input()) num = [1, 1, 1, 2, 1, 2, 1, 5, 2, 2, 1, 5, 1, 2, 1, 14, 1, 5, 1, 5, 2, 2, 1, 15, 2, 2, 5, 4, 1, 4, 1, 51] print(num[k-1])
B. Bishop
マスの数が偶数なら、マスの数の半分、奇数ならマスの数の半分+1分だけ動けるが、
縦横どちらかが1の時は、最初にいる左上隅のマスにいるしかない。
移動回数は0回なので、その時は答えが1になる。
入力の範囲をよく見て極端な例でも証明してみるのが、コーナーケースを考慮する
ポイントらしい。ここで2WA食らった。勉強になります。
ACしたコード
#coding:utf-8 h, w = map(int, input().split()) area = h * w if h == 1 or w == 1: print(1) elif area % 2 == 0: print(area // 2) else: print(-(-area // 2))
C. Sqrt Inequality
ここから解説AC
問題文の通りに普通に実装すると案の定しんだ。
浮動小数点の誤差で爆死してしまうので、できるだけ整数に直してから判定する。
最後まで平方根を除くと、以下のような式になる
最後の式を使って判定したいところだが、 c - a - b < 0
の時は崩壊してしまうので、
その場合は除外する
ACしたコード
#coding:utf-8 import math a,b,c = map(int, input().split()) x = c - a - b #(c-a-b)^2 > 4abする時が答え #ただし(c-b-a) < 0になるものは対象外 if x < 0: print('No') elif x**2 > 4*a*b: print('Yes') else: print('No')