Yuulis.log

トンネルを抜けるとそこは参照エラーであった。

【AtCoder】AtCoder Beginner Contest 349 - 参加記 | 茶コーダーが解くAtCoder

atcoder.jp

コンテスト時間: 2024-04-13(土) 21:00 ~ 2024-04-13(土) 22:40 (100分)

A - Zero Sum Game

Difficulty: ???
解答時間: 2:46

  • 勝者の持ち点が1増え、敗者の持ち点が1減る一対一のゲームを  N 人が行うにあたって、人  1 から  N - 1 の最終的な持ち点  A_1, A_2, ..., A_{N - 1} が与えられたとき、人  N の最終的な持ち点を求める問題。
  •  N 人の持ち点の総和は  0 で常に変わらないことに気付けば、  - \sum_{i = 0}^{N - 1} A_i を出力すればよいことになる。これに気付けなくてもサンプルケースを見ればなんとなくわかったり...

B - Commencement

Difficulty: ???
解答時間: 4:01

  • 以上の整数  i について、「文字列  S にちょうど  i 回現れる文字はちょうど0種類または2種類ある」が成り立つかどうかを判定する問題。
  • まず  S に現れる文字の種類と個数を連想配列 (map) で管理する。そして、各  i (1 \leq i \leq 100) に対してmap.second == iを満たすならばカウンターを増やし、mapの要素を全走査後、カウンターが0または2はでないならばNoを即時に返して終わり。最後まで進めばYesを返す。  i の上限が100なのは、  S の長さが最大100であり最大100個の同じ文字が出現する可能性があるから。

C - Airport Code

Difficulty: ???
解答時間: 20:56 (2WA)

  • 与えられた文字列  T が、英小文字の文字列  S に対して2つの操作のうちいずれかを行ってできた文字列かどうかを判定する問題。
  1.  S の長さ3の部分列をとり、それを英大文字に変換する。
  2.  S の長さ2の部分列をとり、それを英大文字に変換したものの末尾にXを結合する。
  • まず、  T の末尾がXかであるかそうでないかで場合分けをする。
  • 前者ならS[0]S[1]について、後者ならS[0]S[1]S[2]について、それぞれ  S の各文字を全探索して存在するかをチェックする。...と言いたいところなのだが、  S の部分列を取り出してきている点を見落としており、各文字における探索開始地点がずれることを考慮していなかった。その対処の過程で2WAを踏んでしまった。

結果

Performance: 649
Rating: 578 → 585 (+7)

atcoder.jp

Bまでは本当に理想的だった。Cの2WAがなければ緑Perfが狙えそうだったが...