A問題 HonestOrDishonest
1 2 3 4 5 6 7 8 9 10 |
a,b = input().split() if a=='H' and b=='H': print('H') elif a=='H' and b =='D': print('D') elif a=='D' and b=='H': print('D') elif a=='D' and b=='D': print('H') |
B問題 NarrowRectanglesEasy
1 2 3 4 5 6 7 8 9 |
w,a,b = map(int, input().split()) if a <= b <= a+w: print(0) elif b < a+w: print(abs(b-a+w)) elif b > a+w: print(abs(a+w-b)) |
C – Go Home
方針
時刻iは1,2,3,4,5・・・と1秒ごとに進みます。i秒目の時は、距離iを前後に移動すること、または移動しないとう選択ができます。この時に、座標Xに最短で到着する時刻と求めます。
和の公式:n(n+1)/2を用います。※詳細は参考をご覧ください。
解答
コード+コメント
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
""" 和の公式:n(n+1)/2を用いる 毎秒戻ることなく移動した場合で、i秒後までで進める距離がXを超えていたら、 i秒後までに進める各距離から適切な組み合わせを選ぶことでちょうどXに辿り着くことができる・・・らしい """ #入力 x = int(input()) #解答を1で初期化。0にした場合はiも0にする。↓は1秒後の状態から探索開始している。 ans = 1 i=1 #移動距離が座標Xを超えるまで探索 while True: #和の公式により計算した移動距離が座標Xを超えた場合 if i*(i+1)//2 >= x: #解答を出力して終了 exit(print(ans)) #移動距離が座標Xを超えない場合は1を加える ans+=1 i+=1 |
コードのみ
1 2 3 4 5 6 7 8 |
x = int(input()) ans = 1 i=1 while True: if i*(i+1)//2 >= x: exit(print(ans)) ans+=1 i+=1 |
参考
和の公式
1,2,3・・・nまでの和の合計
【基本】和の公式(1からnまでの和) | なかけんの数学ノート (nakaken88.com)
等差数列(↑を一般化した場合)
【基本】等差数列の和 | なかけんの数学ノート (nakaken88.com)
等差数列の和の公式の例題と証明など | 高校数学の美しい物語 (manabitimes.jp)
その他
【Python】AtCoder Beginner Contest 解答・解説記事一覧 | Best Practice (find-best-practice.com)
コメント