💭

AtCoder Beginner Contest 344参加記

2024/03/10に公開

トヨタ自動車プログラミングコンテスト2024#3(AtCoder Beginner Contest 344)に参加したので記録を残します。
https://atcoder.jp/contests/abc344

今回は3完です。ちょっと悔しい。

A - Spoiler

|でsplitすると3つに分かれるので、その1つ目と3つ目を結合します。
最初間違えて2番目を出力したりしてもたもたしました。

fun main() {
    val s = readln()
    val list = s.split("|")
    println(list.first() + list.last())
}

https://atcoder.jp/contests/abc344/submissions/51023304

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)
    }
}

https://atcoder.jp/contests/abc344/submissions/51028025

C - A+B+C

全組み合わせを一通り見ても10^6なので間に合います。クエリごとにそれをやると間に合わないですが、事前に見てsetに記録しておけばいいですね。

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()
}

https://atcoder.jp/contests/abc344/submissions/51040129

しかし遅いなこれ。出力をバッファリングしなかったらTLEになってたかもですね。

D - String Bags

残念ながら解けず。各袋について選ぶか選ばないかと考えられるので、こういうのはいかにもDPだよなとは思ったものの、実際どうやればいいかまではわからず。DPなにもわからない。

ヤケクソで枝刈りDFSでやってみたりしましたが、やっぱりダメでした。

https://atcoder.jp/contests/abc344/submissions/51087723

でもなんか意外とTLEが少ない…

DP解法は後でやってみます。

感想

Cまではわりと素早く解けましたが、Dが解けなかったので微冷え。やはり早解き3完程度では、Dが崖でもない限りダメか…
Dはヤケクソで全探索なんかするよりもうちょっとマシな立ち回りがあったのではと思いつつ、まあいずれにしても解けなかった気がします。ただの実力不足なので今回はしょうがないですね。ただ解説を見たら理解できそうな気がしたので、これを機に定着させておきたいところ。これくらいのほどよい悔しさが実力アップにはちょうどいいかも…
(執筆時間: 17分45秒)

Discussion