AtCoder Beginner Contest 344参加記
トヨタ自動車プログラミングコンテスト2024#3(AtCoder Beginner Contest 344)に参加したので記録を残します。
今回は3完です。ちょっと悔しい。
A - Spoiler
|
でsplitすると3つに分かれるので、その1つ目と3つ目を結合します。
最初間違えて2番目を出力したりしてもたもたしました。
fun main() {
val s = readln()
val list = s.split("|")
println(list.first() + list.last())
}
B - Delimiter
入力行数が与えられない問題って珍しい気がしますね。
この制約だと最後に入力されるのは0で、最後以外で0が入力されることはないので、0が入力されるまでループすればいいですね。
入力とは逆順なので、一旦可変リストに入れてから最後に反転して出力です。
fun main() {
val list = mutableListOf<Int>()
while (true) {
val a = readln().toInt()
list.add(a)
if(a == 0) {
break
}
}
list.reversed().forEach {
println(it)
}
}
C - A+B+C
全組み合わせを一通り見ても
import java.io.PrintWriter
fun main() {
val n = readln().toInt()
val a = readln().split(" ").map { it.toLong() }
val m = readln().toInt()
val b = readln().split(" ").map { it.toLong() }
val l = readln().toInt()
val c = readln().split(" ").map { it.toLong() }
val q = readln().toInt()
val x = readln().split(" ").map { it.toLong() }
val set = mutableSetOf<Long>()
for(i in 0 until n) {
for(j in 0 until m) {
for(k in 0 until l) {
val num = a[i] + b[j] + c[k]
set.add(num)
}
}
}
val out = PrintWriter(System.out)
for(i in 0 until q) {
if(x[i] in set) {
out.println("Yes")
} else {
out.println("No")
}
}
out.flush()
}
しかし遅いなこれ。出力をバッファリングしなかったらTLEになってたかもですね。
D - String Bags
残念ながら解けず。各袋について選ぶか選ばないかと考えられるので、こういうのはいかにもDPだよなとは思ったものの、実際どうやればいいかまではわからず。DPなにもわからない。
ヤケクソで枝刈りDFSでやってみたりしましたが、やっぱりダメでした。
でもなんか意外とTLEが少ない…
DP解法は後でやってみます。
感想
Cまではわりと素早く解けましたが、Dが解けなかったので微冷え。やはり早解き3完程度では、Dが崖でもない限りダメか…
Dはヤケクソで全探索なんかするよりもうちょっとマシな立ち回りがあったのではと思いつつ、まあいずれにしても解けなかった気がします。ただの実力不足なので今回はしょうがないですね。ただ解説を見たら理解できそうな気がしたので、これを機に定着させておきたいところ。これくらいのほどよい悔しさが実力アップにはちょうどいいかも…
(執筆時間: 17分45秒)
Discussion