AtCoder Beginner Contest 364参加記
日本レジストリサービス(JPRS)プログラミングコンテスト2024#2(AtCoder Beginner Contest 364)に参加したので記録を残します。
ちょっと間が空いてしまって、なんとなく自信がなくてUnrated参加としました。3完でしたが、Dが難しかったのかRatedにしていたらかなり良いパフォーマンスになっていたっぽいです。
A - Glutton Takahashi
先頭から
fun main() {
val n = readln().toInt()
val s = List(n) {
readln()
}
for(i in 0 until n - 1) {
if(s[i] == "sweet" && s[i+1] == "sweet") {
if(i == n - 2) {
println("Yes")
} else {
println("No")
}
return
}
}
println("Yes")
}
B - Grid Walk
問題文の通りシミュレーションします。グリッドは苦手意識が強いですが、このくらいの難易度であれば問題なかったです。
今回は1-indexedに補正してやってみました。
fun main() {
val (h, w) = readln().split(" ").map { it.toInt() }
val (si, sj) = readln().split(" ").map { it.toInt() }
val c = listOf("") + List(h) {
"." + readln()
}
val x = readln()
var ci = si
var cj = sj
for(xc in x) {
val (di, dj) = resolveDest(xc)
val i = ci + di
val j = cj + dj
if(i !in 1..h || j !in 1..w) {
continue
}
if(c[i][j] == '#') {
continue
}
ci = i
cj = j
}
println("$ci $cj")
}
fun resolveDest(x: Char): Pair<Int, Int> {
return when(x) {
'L' -> 0 to -1
'R' -> 0 to 1
'U' -> -1 to 0
'D' -> 1 to 0
else -> -1 to -1
}
}
C - Minimum Glutton
甘さとしょっぱさは独立して考えることができます。最小にするには甘さ(or しょっぱさ)が大きいのを優先して食べていけばいいはずなので、降順ソートしてから合計値が閾値を超えるまで見ていきます。それを甘さとちょっぱさの両方でやって、小さい方が答えとなります。
import kotlin.math.min
fun main() {
val (n, x, y) = readln().split(" ").map { it.toLong() }
val a = readln().split(" ").map { it.toLong() }
val b = readln().split(" ").map { it.toLong() }
val ab = a.zip(b)
val sorted1 = ab.sortedByDescending { it.first }
var current = 0L
var count1 = 0
for(i in 0 until n.toInt()) {
current += sorted1[i].first
count1++
if(current > x) {
break
}
}
val sorted2 = ab.sortedByDescending { it.second }
current = 0L
var count2 = 0
for(i in 0 until n.toInt()) {
current += sorted2[i].second
count2++
if(current > y) {
break
}
}
val ans = min(count1, count2)
println(ans)
}
なんでわざわざPairにしたのか… 混乱してますね。
D - K-th Nearest
事前にデータ構造を作っておくとかは難しそうで、二分探索とかじゃね?(適当)と思ってましたが解けず。実際、二分探索で解けるようです。判定問題を真面目に考えればよかったのか。
感想
二週続けて参加できなかったので、すごく久しぶりのように感じてしまいました。前回の参加時の結果が惨憺たるものだったのもあって、Rated参加する勇気が出ず。なんなら参加自体見送ろうか迷ったのですが、悪くない結果になったのでUnratedでも参加してよかったです。多少はやる気が戻りました。
まあ… 実力が上がったわけではなくて偶発的に良い結果が出ただけなので、前回みたいな爆死は今後もあるんでしょうけどね。そうなってもモチベを保てるメンタルがほしい…
まだやめたくはないので、できる範囲で頑張っていきます。
(執筆時間: 19分48秒)
Discussion