AtCoder Beginner Contest (ABC) 190 PythonでA,B問題解いてみた
後編(C問題)
こんにちは。メリーです。
最近、ゲーミングキーボードを買おうかどうか悩み中です。
logicoolの激安キーボードを使っていたのですが、お金が溜まってきたので今のタイミングで購入しようかなぁ、と。
今使ってるやつはこれ
そして、購入を考えているのがこの2種類
今使っているk120も、コストパフォーマンスは問題ないんだけど、せっかくお金が溜まったので、このタイミングでいいやつを買っておくと、QOLが向上するだろうし・・・。
この先就職してゲームやらなくなったとしても、プログラミングやらブログやらで何かしらパソコンには触るだろうから、このタイミングで買い替えてもいいかな〜〜と妄想中。
ゲーミングキーボードを全く使ったことが無いので、色々調べてみると、何やらゲーミングキーボードには軸というものが存在するらしい。
その軸によって打鍵感が変化する云々・・・・。
正直わからんので、実際にお店で触ってみてから買おうかな〜〜って思ってます。
買ったらレビュー書きます。(予定)
閑話休題
そんなわけで本日もAtCoder Beginner Contest (ABC) 190解いて行きます。
言語はPython、提出はPyPyです。
C問題はこちらから
目次
A問題
問題文
アメを交互に食べていき、どっちが先に食べられなくなるでしょうか、というゲーム。
サッカーとかのサドンデスルールに似てますね。
というわけで方針です。
1. 持ってるアメが多いやつが勝つ。
2. 同数の場合、先行が負ける。
という感じですね。
これらを実装したコードです。
a,b,c = map(int,input().split()) if a < b: print("Aoki") elif b < a: print("Takahashi") else: if c: print("Takahashi") else: print("Aoki")
if文で場合分けしていけば問題ないですね。
同数の後のif文ですが、0と1はbool型としても扱えます。なので、
if c:
というのは、
cが1であればTrueを、0であればFalseを返します。
こうすればわざわざc = 1とか書かなくても良いです。
B問題
問題文
RPGで敵に対する攻撃手段があるか無いかを判別する問題です。
詠唱が長ければ詠唱中に敵にしばかれますし、火力がなければ敵のHPを減らせず、一方的に自分のHPが減ってしばかれます。
ダメージが1でも与えられると、相手のHPを削ることができるので、敵の攻撃を全て避けてダメージを与え続けて敵をしばけます。
まぁ、それが現実的かはさておき。
というわけで方針です。
1. 全探索する。
2. 各ループで、詠唱チェック。
3. 詠唱チェックが通ったら火力チェック。
4. 両方通ったものがあればYes、なければNoを出力。
という感じですね。
実際のコードです。
n,s,d = map(int,input().split()) magic = [] for i in range(n): x,y = map(int,input().split()) magic.append([x,y]) flg = 0 # 全探索する。 for i in range(n): # 詠唱チェック if magic[i][0] < s: # 威力チェック if magic[i][1] > d: flg = 1 break if flg: print("Yes") else: print("No")
まず、変数magicに各呪文の情報(詠唱、火力)をリストにして入れます。
変数flgはフラグです。チェックを通った呪文があればこれを1にします。
全探索は、Nの最大値がたかが100なので余裕で通ります。
※AtCoderでは、ループが108~9くらいまで回せるらしいです。
ダブルチェックを抜けた呪文があればflgが1になっているはずなのでYesを、それ以外ならNoを出力して終わりです。
また、0と1はbool型として使えるので、if文は
if flg:
で十分です。flgが立っていれば(flg=1)Trueを返します。
C問題
明日やります。
解説見たけどよくわからんかったので明日調べて記事にします。
追記
やりました。これです。
それでは