AtCoder Beginner Contest 349参加記
AtCoder Beginner Contest 349に参加したので記録を残します。
今回は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())
}
最初はよく考えずに絶対値を出力してました。importに残骸が…
B - Commencement
これもBにしては難しい…
まずは出現回数を文字ごとに数えました。それをmapで保持して、mapの値リストを各
ただ、探索をどこで打ち切ればいいのか迷って、見つけた文字を元の文字列から消していって、空文字になったら終了という処理にしました。
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")
}
こちらでもimportに変なのが残ってしまいました。
C - Airport Code
X
なら前の2文字だけ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")
}
D - Divide Interval
問題文を理解するのがやっとで、全然解けず。出力例を見ると2の乗数がちらほら見えるのが気になったけど、それ以上のことはわからず。
E - Weighted Tic-Tac-Toe
いわゆる◯✕ゲーム、三目並べですね。ちょっとググってみて、お互いに最適な行動をとれば必ず引き分けになるというのはわかりました。なので、この問題の場合は勝敗を決する要因は得点ということですね。シグマ記号の読み方がわからなかったけど、要するに得点が一致してしまって勝敗が決まらないことはないよという意味かと思いました。
解き方はわからなかったけど、解説をざっくり見るとどうやら全部調べるだけでいいっぽいので解けなかったのは残念…
DとEのどちらに注力するか考えましたが、解いている人数がDのほうが明らかに多かったのでDに時間を費やしましたが、Eのほうを選んでいたらまた違う結果になっていた可能性も。いや、解けるのであればそもそも見誤らないだろうからやっぱり解けなかったかも。
感想
DEが解けなかったのよりCで1ペナ出したのが残念ですね。レートとしては軽傷で済んだのですが。まあ、すぐにリカバリできて軽傷で済んでよかったと考えるべきか。
Dは解説見てもわからんので、一旦Eのほうがupsolveできないかどうか考えてみようと思っています。
ここ最近はあまり時間がないのもあり、現状解けない問題が解けるようになるための精進はほとんどできてないので当分こんな感じで停滞が続きそうです。諦めたわけではないので、比較的少ない時間でもできるような、過去に解いた問題を解き直すみたいなことをしています。あまり実力は上がらないでしょうけど、せめて錆びつかないようにという感じ。やめてしまうことさえしなければOK!のんびりやります。
(執筆時間: 27分17秒)
Discussion