🐥

AtCoder Beginner Contest 349参加記

2024/04/14に公開

AtCoder Beginner Contest 349に参加したので記録を残します。
https://atcoder.jp/contests/abc349

今回は3完です。1ペナしてくやしい。

A - Zero Sum Game

なんだこれやべえと思ったけど、問題文が答えでした。つまり合計点は0になるので、入力値の合計値を打ち消して0にする値、要するに合計値の符号を反転した値が答えです。

import kotlin.math.absoluteValue

fun main() {
    val n = readln().toInt()
    val a = readln().split(" ").map { it.toInt() }

    println(-a.sum())
}

https://atcoder.jp/contests/abc349/submissions/52295917

最初はよく考えずに絶対値を出力してました。importに残骸が…

B - Commencement

これもBにしては難しい…
まずは出現回数を文字ごとに数えました。それをmapで保持して、mapの値リストを各iで線形探索、0個または2個かを調べました。
ただ、探索をどこで打ち切ればいいのか迷って、見つけた文字を元の文字列から消していって、空文字になったら終了という処理にしました。

import kotlin.math.sign

fun main() {
    val _s = readln()

    val map = mutableMapOf<Char, Int>()
    for(c in _s) {
        map[c] = map.getOrDefault(c, 0) + 1
    }

    var s = _s
    var i = 1
    while (true) {
        val f = map.filter { it.value == i }
        if(f.size != 2 && f.size != 0) {
            println("No")
            return
        }

        f.forEach {
            s = s.replace(it.key.toString(), "")
        }

        if(s.isEmpty()) {
            break
        }
        i++
    }

    println("Yes")
}

https://atcoder.jp/contests/abc349/submissions/52305754

こちらでもimportに変なのが残ってしまいました。

C - Airport Code

Sから抽出してTを作るのは難しそうなので、Tのほうの文字がSにあるかどうかを調べました。Tに含まれる3文字がそのままの順番でSにあればOK。
Tの3文字目がXなら前の2文字だけSにあればOKなのですが、「3文字目がXなら」という条件を抜かして1ペナもらいました。悲しいね。

fun main() {
    val s = readln()
    val t = readln()

    val lt = t.lowercase()

    var ti = 0
    var find = 0
    for(c in s) {
        if(c == lt[ti]) {
            find++
            ti++
        }
        if(find == 3) {
            println("Yes")
            return
        }
        if(find == 2 && t.last() == 'X') {
            println("Yes")
            return
        }
    }
    println("No")
}

https://atcoder.jp/contests/abc349/submissions/52314090

D - Divide Interval

問題文を理解するのがやっとで、全然解けず。出力例を見ると2の乗数がちらほら見えるのが気になったけど、それ以上のことはわからず。

E - Weighted Tic-Tac-Toe

いわゆる◯✕ゲーム、三目並べですね。ちょっとググってみて、お互いに最適な行動をとれば必ず引き分けになるというのはわかりました。なので、この問題の場合は勝敗を決する要因は得点ということですね。シグマ記号の読み方がわからなかったけど、要するに得点が一致してしまって勝敗が決まらないことはないよという意味かと思いました。
解き方はわからなかったけど、解説をざっくり見るとどうやら全部調べるだけでいいっぽいので解けなかったのは残念…
DとEのどちらに注力するか考えましたが、解いている人数がDのほうが明らかに多かったのでDに時間を費やしましたが、Eのほうを選んでいたらまた違う結果になっていた可能性も。いや、解けるのであればそもそも見誤らないだろうからやっぱり解けなかったかも。

感想

DEが解けなかったのよりCで1ペナ出したのが残念ですね。レートとしては軽傷で済んだのですが。まあ、すぐにリカバリできて軽傷で済んでよかったと考えるべきか。
Dは解説見てもわからんので、一旦Eのほうがupsolveできないかどうか考えてみようと思っています。

ここ最近はあまり時間がないのもあり、現状解けない問題が解けるようになるための精進はほとんどできてないので当分こんな感じで停滞が続きそうです。諦めたわけではないので、比較的少ない時間でもできるような、過去に解いた問題を解き直すみたいなことをしています。あまり実力は上がらないでしょうけど、せめて錆びつかないようにという感じ。やめてしまうことさえしなければOK!のんびりやります。
(執筆時間: 27分17秒)

Discussion