前回のABC194に引き続き、参加はしていましたが、振り返りをしていなかったABC195の振り返りの記事です。
少し前にもPanasonicさん主催のコンテストがありましたが、今回もPanasonicさん主催のコンテストです。
前回も書いた気もしますが、家電はPanasonic製品が多いPanasonic大好きっ子です。
茶色下位の私がABCのC問題までを振り返りつつACしたコードを載せています。
使用言語はPython3です。
A – Health M Death
FF(FinalFantasy)シリーズのレベル5デスを感じさせる問題。
条件分岐と倍数判定が出来るかを問われる問題。
倍数判定は、割った余りが0であることを利用して書けばOKですね。
# パナソニックプログラミングコンテスト(AtCoder Beginner Contest 195)
# A - Health M Death
M,H=map(int,input().split())
if H%M==0:print("Yes")
else: print("No")
B – Many Oranges
切り上げ切り捨てとなる数字の扱いを問われる問題。
または、細かく条件分岐を考えて場合分けしていく問題。
重量の単位が問題文中はgですが、入力で与えられる数字はkgなので、注意しましょう。
私は、コンテスト中、細かく条件分岐を考えて場合分けして書いていきましたが、公式の解説にもある通り、軽いミカンを多く使った場合と、重いミカンを多く使った場合を考えて、それぞれ切り上げ切り捨てすれば答えが求まります。
Python3では、mathモジュールのceilと、floor関数を利用すれば答えが求まります。
# パナソニックプログラミングコンテスト(AtCoder Beginner Contest 195)
# B - Many Oranges
import math
A,B,W=map(int,input().split())
W*=1000
l=math.ceil(W/B)
r=math.floor(W/A)
if l>r:
print("UNSATISFIABLE")
exit()
print(l,r)
C – Comma
場合分けができるかを問われる問題。
私はコンテスト中に解けませんでした。結局、わからずに解説を見て解きました。
# パナソニックプログラミングコンテスト(AtCoder Beginner Contest 195)
# C - Comma
N=int(input())
ans=0
if N>=1_000:ans+=N-999
if N>=1_000_000:ans+=N-999_999
if N>=1_000_000_000:ans+=N-999_999_999
if N>=1_000_000_000_000:ans+=N-999_999_999_999
if N>=1_000_000_000_000_000:ans+=N-999_999_999_999_999
if N>=1_000_000_000_000_000_000:ans+=N-999_999_999_999_999_999
print(ans)
日常的に使っている3桁区切りの,はプログラミングでは使用できないので、数字の桁が多くなる時には、Python3は、”_”を使用して3桁区切りにすると可読性が上がるような気がします。
コメント