ABC195参戦記

プログラミング

前回の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桁区切りにすると可読性が上がるような気がします。

コメント

タイトルとURLをコピーしました