AtCoder Beginner Contest 324参加記(A~B)
日本レジストリサービス(JPRS)プログラミングコンテスト2023(AtCoder Beginner Contest 324)に参加したので記録を残します。
今回は残念ながら2完なのであまり書くことがないですが。
A - Same
全部同じであればいいのでdistinct()
で重複排除した後の要素数が1ならYesです。
fun main() {
val n = readln().toInt()
val a = readln().split(" ").map { it.toInt() }
if(a.distinct().size == 1) {
println("Yes")
} else {
println("No")
}
}
これは42秒で提出できたので、ここまでは良かったんですけどね…w
B - 3-smooth Numbers
素因数分解して結果が2と3しかなかったらOKと思って、素因数分解をする関数は用意してあるのでそれを貼ってサクッと提出しましたがTLEになってしまいました…
たぶん2と3以外の素因数についての計算も行なってしまうからですね。結局、1になるまで2か3で割り続けて、1になる前に2でも3でも割れなかったら切り上げる、としました。
fun main() {
val n = readln().toLong()
var num = n
while (true) {
if(num == 1L) {
println("Yes")
return
}
if(num % 2 == 0L) {
num /= 2
} else if(num % 3 == 0L) {
num /= 3
} else {
println("No")
return
}
}
}
ここでの1ペナは痛いですね。
C - Error Correction
制約は 「
といっても文字列関連のアルゴリズムはほぼ勉強したことがなく、コンテスト時間内だけで身につけるとか無理だろうと思って、わりと早々に諦めてしまいました。
勘違いに気づいたのはコンテスト終了後でした。
実際には、ちょっと実装は面倒だけど愚直に調べればよかったようです。それなら粘りたかった。うーーんおバカすぎます。
感想
的はずれとはいえ、部分文字列のハッシュを求めておいてそれを使って部分文字列の判定ができるらしいみたいなのを知れたのは良かったかもしれません。まあ実際の計算方法についてはよくわかってないのと、ハッシュの衝突を現実的にどうやって避けるとかもわからないので全然実戦投入はできませんが。
まあこの辺りの話は全然Cの難易度ではない(もっと上)っぽかったので、Cでこれを求めるのはおかしくね?と気づくべきでしたねぇ。文字列関連のアルゴリズムについて無知なので気づけなかったですね。
制約を勘違いして問題の難易度を見誤ったのは前もありました。その時は、解いている人数が明らかに多くて、おかしいだろと気づいたのですが、今回は普通に解けなかった人もけっこういたようなので気づけず。
あとは、後出しなので言い訳っぽいのですが、コンテスト開始直前はテンションが低くてあまり気乗りしなかったんですよね。そういうテンションで参加した結果でもあるかも。なので、今回のような精神状態でRated参加するのはダメだなと思いましたね…
普段なら解けないなりに楽しいということもあるのですが、今回はそれも感じることができなくて。テンション低いとそうなるんですね。
まあいろいろ考えましたが、とりあえず今回のことは忘れて来週頑張ろうって考えるのがよさそうですw
(執筆時間: 30分8秒)
Discussion