AtCoder Beginner Contest 336参加記(A~C)
AtCoder Beginner Contest 336(ABC336)に参加したので記録を残します。
今回は3完です。わりと早く解けたのでレートはそこそこ上がりました。
A - Long Loong
前回に引き続き龍ネタですね。
Stringのrepeat()
で文字列を生成しました。文字列の中で${}
を使うと中の値を評価して文字列に埋め込んでくれるのですが、なんか見た感じがごちゃごちゃしてますね…
fun main() {
val n = readln().toInt()
println("L${"o".repeat(n)}ng")
}
B - CTZ
2進数文字列を生成して、後ろから数えました。KotlinだとtoString()
に引数を渡すとそれに応じてN進数文字列を生成してくれます。
bit演算は未だに苦手で、文字列に頼りがちです。
fun main() {
val n = readln().toInt()
val s = n.toString(2)
var ans = 0
for(i in s.indices.reversed()) {
if(s[i] == '0') {
ans++
} else {
break
}
}
println(ans)
}
C - Even Digits
5つの数字が登場するので5進数じゃんとわりとすぐに気づきました。
Bと同様にtoString(5)
で5進数文字列を取得して数字を置き換えました。置き換え後の数字が再度置き換えられないように、大きいほうの数から置き換えます。
1を引かないといけないのは、0があるからですね。ちなみにminus()
メソッドは-
と等価です。カッコを書くのがなんか面倒だったのでminus()
のほうを使ってみました。
fun main() {
val n = readln().toLong()
val s = n.minus(1).toString(5)
val ans = s.replace('4', '8')
.replace('3', '6')
.replace('2', '4')
.replace('1', '2')
println(ans)
}
D - Pyramid
解けませんでした。先頭を1と仮置きして、そこからインクリメントしてそれぞれの位置の値を調べて、あるべき値より小さい数があったら消せばいいんじゃないかと思ったのですが、そもそも消せるのは先頭と末尾だけでした。盛大な誤読…
まあ、誤読がなくても解けなかったでしょうけど。まだupsolveできていません。
感想
珍しく早解きできて、またDがわりと難しめだったということでレートは上がりました。ここのところ連勝していてだいぶレートは上がっているのですが、これは果たして実力なのか、運なのかよくわかりません。
数値的には緑が近いように見えるのですが、ほんとかな…
精進していないわけではないのですが、既に解けそうな問題を埋めるだけのことが多いので、今まで解けなかった問題が解けるようにはなっていません。その代わり、解けるべき問題を落とす確率はいくらか下がっているのかも?
何にせよ、ここまで来たら緑になりたいですね。解けない問題を解けるようにするほうも頑張って確度を上げるべきか。
ただ、問題の内容よりもレートに目が行くのはあんまり良い兆候ではない気もします。レートを気にしすぎて、ここから停滞したり下がったりしたときにメンタルブレイクするのは避けたいです。あくまでもゆるゆるとやります。
(執筆時間: 25分31秒)
Discussion