今回もAtCoder Beginner Contestに参加しました。前回の日曜日にARC(AtCoder Regular Contest)にチャレンジしたのですが、惨敗。アルゴリズム力の無さが露呈してしまったコンテストになってしまいました😭
A – Blood Pressure
これは、小数点に気をつければ簡単に解ける問題になっています。また、入力のAとBの制約から、相対誤差は大きくならないことが予想されるため、あまり制約を意識しなくても良さそうです。以前同じような問題を解いたことがあるため難なくクリアしました。
func readTwoInts() -> (a: Int, b: Int) {
let ints = readLine()!.split(separator: " ").map { Int(String($0))! }
return (a: ints[0], b: ints[1])
}
let (A,B) = readTwoInts()
let C = (Double(A)-Double(B))/3 + Double(B)
print(C)
B – Cycle Hit
この問題の解き方はさまざまありそうですが、私はSetを使用して組み合わせを数えました。
let numbers = (0..<4).map { _ in readLine()! }
var set = Set(numbers)
if set.count == 4 {
print("Yes")
} else {
print("No")
}
文字列の配列としてみた時にソートしてあげる方法もある。
正解をソートしたものと比べて同じであれば”Yes”を出力異なれば,
“No”を出力する。
var lines = (0..<4).map {_ in readLine()!}.sorted()
var dic = ["2B", "3B", "H", "HR"]
func main1() {
if dic == lines {
print("Yes")
} else {
print("No")
}
}
main1()
C – chokudai
C問題ではDP(動的計画法)を使用する問題が出題されました。DPの問題は何かと初めてだったので、普通に深さ優先探索で計算しようとしていました。
DPの問題は、Educational DP Contest / DP まとめコンテストにまとまっているのですが、まだ手をつけていませんでした。https://atcoder.jp/contests/dp/
この問題を機に少しDPについての知識を深めようと思いました。
まとめ
来週までにやること
- この記事を参考にDPの理解を深める
- 目標を持って問題を解く。茶の問題を何も見ずに解けるように演習を重ねる。とりあえず3日に1問解く。
一番重かった論文の執筆が終わったので、やりたいこととやるべきことを常に意識しながら頑張る。