Port 53

明日のための技術メモ

AtCoder ABC153

AtCoder ABC153解いた分だけまとめ。
今回はけものフレンズじゃないですかもう笑 結果はABC3完、Dは解説ACです。再帰で良かったのか...
レートまたやや冷えで悲しい。

目次

解説AC

A. Serval vs Monster

問題文 f:id:saturn-glave:20200127230320p:plain

体力を攻撃分で割る。答えは切り上げになる。

ポイント

  • 切り上げの書き方。-(-x // y)
  • 切り捨てはx // y

ACしたコード

#coding:utf-8
h, a = map(int, input().split())

#切り上げ
print(-(-h//a))

B. Common Raccoon vs Monster

問題文 f:id:saturn-glave:20200127230650p:plain

必殺技でしか攻撃できないので、必殺技の合計値と体力を比較し、
その結果で場合分けする。
必殺技の合計が体力より小さければ、同じ技を使うことになる。

ACしたコード

#coding:utf-8
h, n = map(int, input().split())
a = list(map(int, input().split()))

if h <= sum(a):
    print('Yes')
else:
    print('No')

C. Fennec vs Monster

問題文 f:id:saturn-glave:20200127231218p:plain

モンスターの体力が高い順にソートする。
体力が高いk番目のモンスターまでに必殺技を使い、
使わなかった分のモンスターの体力の和が通常攻撃で倒すことになる。

ACしたコード

#coding:utf-8
n, k = map(int, input().split())
h = list(map(int, input().split()))

h_sort = sorted(h, reverse=True)

print(sum(h_sort[k:]))

D. Caracal vs Monster

問題文 f:id:saturn-glave:20200127231506p:plain

ここから解説AC。再帰関数で実装する。

ポイント

  • 再帰関数の使用
  • ⌊X⌋(xの床)を表すのに math.floorを使う

ACしたコード

#coding:utf-8
import math

def caracal(h):
    if h == 1:
        return 1
    else:
        return 2*caracal(math.floor(h/2)) + 1

if __name__ == "__main__":
    h = int(input())
    print(caracal(h))

参考

Pythonで小数点以下を切り捨て・切り上げ: math.floor(), math.ceil()