mery's Notes

めりーがプログラミングしたりします。

MENU

AtCoder Beginner Contest (ABC) 189 PythonでA,B問題解いてみた

前回解いたやつ

mery-kirokudayo.hateblo.jp

後編(C問題)

mery-kirokudayo.hateblo.jp

f:id:mery_poke:20211101225452p:plain

こんにちは。メリーです。

今日はお家でゆっくりと雀魂をやってました。
雀魂って英語のタイトル名Mah-jong Soulなのカッコイイよね。

あともう少し(100pt無いくらい)で雀士から雀傑になれるのじゃ!!
※なったら雀魂の記事書きます。

というわけで本日も元気にAtCoder Beginner Contest (ABC) 189のA,B問題を解いて行きます。
今日は久しぶりにB問題で沼ったのでそこらへんの恨みつらみも合わせて・・・

C問題はこっち

mery-kirokudayo.hateblo.jp

言語はPython、提出はPyPyです。

目次ッ

A問題

問題文

A - Slot

ガチャの問題ですね。

しかも昔ながらのスロットタイプ。

モノクマのマシーンとか、よく回したな・・・
好感度を上げるとパンツくれるからな・・・
やってることギャルゲーだよね。

↓好感度を上げるとパンツがもらえるゲーム(スーパーの方だよ)。

↓な、何だってッ! Switch版が出ているだと・・・・ッ!
調べて初めて知った。しかも本編3作とも入ってんじゃん・・・

閑話休題それはさておき

本編に戻ります。

方針はこんな感じで
1. if文で場合分けする。
以上!!

実装編

c = input()
if c[0] == c[1] == c[2]:
    print("Won")
else:
    print("Lost")

文字列としてinputします。
文字列なので、c[0]などとすることで、要素を取り出せます。
取り出した3つの要素が全て等しければWon、それ以外はLostを出力して終了。

B問題

問題文

B - Alcoholic

アルコールをどれだけ飲めるか問題ですね。

アルコールの許容量を超えたらOUT!
その時の杯数を出力する問題ですね。

まぁ、Nがたかが103程度なので余裕で全探索で問題ないっすね〜〜〜〜

というわけで方針。
1. 全探索する。
2. 今までに飲んだアルコールの量を計算する。
3. 2が許容量を超えているかチェック
4. 超えてたら終了、超えてないなら続行

実装編

n,x = map(int,input().split())
v = []
p = []
for i in range(n):
    V,P = map(int,input().split())
    v.append(V)
    p.append(P)
alc = 0
ans = -1
for i in range(n):
    alc += v[i] * p[i] / 100 
    if alc > x:
        ans = i+1
        break
print(ans)

よし!余裕ですね!所詮B問題なんてこんなもんよ
提出!

:
:
:
:
:
:
:
:
:
:
:

f:id:mery_poke:20210916191802p:plain

なんでWAなんだよごらああああああああああああああああああああ

運営ごらああああああああああああああああああああああああああああ

というわけで解説を見ると、

浮動小数点数の演算は一般に誤差を含みます。

とのこと。

この誤差を解消するためにはそもそも小数(割り算)を使用しなければいいのね。そうなのね。

というわけで真の実装

n,x = map(int,input().split())
v = []
p = []
for i in range(n):
    V,P = map(int,input().split())
    v.append(V)
    p.append(P)
alc = 0
ans = -1
for i in range(n):
    alc += v[i] * p[i] 
    if alc > 100*x:
        ans = i+1
        break
print(ans)

変更したのはこの部分

alc += v[i] * p[i]
if alc > 100*x:

%計算を100倍することできれいに掛け算のみで計算することができました。

そんな感じっすね。 if文でのansの更新が入らなければansは-1が格納されているので変更されずに−1を出力しますよ。と。

C問題は明日やります

やりました。

mery-kirokudayo.hateblo.jp

それでは。