AtCoder Beginner Contest 447 コンテストまとめ

コンテスト情報

AtCoder Beginner Contest 447 - AtCoderatcoder.jp favicon

コンテスト時間: 2026-02-28(土) 21:00 ~ 2026-02-28(土) 22:40 (100分)

A 問題

  • Difficulty: 15 / NoviSteps: 7Q / 解答時間: 2:12

問題概要

NN 個の座席が横一列に並んでいて、各座席には最大で 11 人まで座ることができる。 隣り合う 22 つの席の両方に人が座らないように MM 人を座席に座らせることができるかどうか判定せよ。

解答方針

  • 左から1つおきに座らせていくことを考えると、 N2M\left\lceil \frac{N}{2} \right\rceil \geq M ならばYesと判定できる。

ABC 447 A - Seats 2yuulisio.com favicon

B 問題

  • Difficulty: 50 / NoviSteps: 6Q / 解答時間: 4:32

問題概要

英小文字からなる文字列 SS が与えられる。 SS の中で出現回数が最も多い文字をすべて取り除き、残った文字を元の順序を保ったまま連結して出力せよ。 出現回数が最大の文字が複数種類ある場合は、そのすべてを取り除くこと。

解答方針

  • SS の各文字の出現回数を数え、最大の出現回数を求める。
  • SS を先頭から走査し、出現回数が最大の文字でないものを出力していく。

ABC 447 B - mppyuulisio.com favicon

C 問題

  • Difficulty: 326 / NoviSteps: 2Q / 解答時間: 12:20

問題概要

英大文字からなる文字列 S,TS,T が与えられる。 あなたは以下の 22 種類の操作を好きな順序で 00 回以上行うことができる。

  • SS の好きな位置(先頭および末尾を含む)に文字A11 つ挿入する。
  • SS に含まれる文字A11 つ選んで削除する。なお、残った文字は元の順序を保ったまま連結される。

SSTT に一致させることが可能かどうか判定し、可能な場合は必要な操作回数の合計の最小値を求めよ。

解答方針

  • まず、SSTT の両方から文字Aを全て取り除いた文字列をそれぞれ S,TS', T' とする。 STS' \neq T' ならば、 S=TS = T にすることは不可能。
  • そうでないとき、 A以外の文字でSSTT を分割し、それぞれの区間に含まれるAの個数を数える。 SS の区間に含まれるAの個数を sis_iTT の区間に含まれるAの個数を tit_i とする。
  • 区間ごとに、sis_itit_i の差の絶対値を足し合わせる。これが求めるべき答えとなる。

ABC 447 C - Insert and Erase Ayuulisio.com favicon

D 問題

  • Difficulty: 430 / NoviSteps: 2Q / 解答時間: 9:18

問題概要

A, B, C33 種類の文字のみからなる文字列 SS が与えられる。 文字列 SS に対して、以下で定義される操作を最大で何回操作を行うことができるかを求めよ。

  • 1i<j<kS1 \le i \lt j \lt k \le |S| かつ Si=S_i =A, Sj=S_j =B, Sk=S_k =Cを満たす (i,j,k)(i, j, k) の組を選び、SSi,j,ki, j, k 文字目を取り除く。残った文字を元の順序を保ったまま左に詰める。

解答方針

  • 以下の3つのカウンターを用意しておく。
    • cnt_A: これまでに見た文字のうち、Aの個数
    • cnt_AB: これまでに見た文字のうち、Aの後にBが出現するパターンの個数
    • cnt_ABC: これまでに見た文字のうち、Aの後にBが出現し、さらにその後ろにCが出現するパターンの個数
  • SS の先頭から順に文字を見ていき、以下の処理を行う貪欲法が成立する。
    • 文字がAのとき、cnt_A11 増やす。
    • 文字がBのとき、cnt_A11 減らし、cnt_AB11 増やす。
    • 文字がCのとき、cnt_AB11 減らし、cnt_ABC11 増やす。
  • 最終的に、cnt_ABCが求めるべき答えとなる。

ABC 447 D - Take ABC 2yuulisio.com favicon

E 問題

  • Difficulty: 955 / NoviSteps: 1Q / 解答時間: 31:08 + WA x 1

問題概要

NN 頂点 MM 辺からなる単純連結無向グラフ GG が与えられる。各辺にはコストとよばれる値が定められており、辺 ii のコストは 2i2^i である。

今から、GG の連結成分の個数がちょうど 22 になるように、GG の辺のうちいくつかを選んで削除する。 削除する辺のコストの和としてありうる最小値を 998244353998244353 で割った余りを求めよ。

解答方針

  • 操作を逆から考え、初めに NN 個の頂点をそれぞれ独立な連結成分とする。
  • 辺のコストの大きい順に見ていき、その辺が接続する2つの頂点が異なる連結成分に属しているなら、両者を merge する。ただし、連結成分の個数が 22 個になったときは打ち切る。
  • その後、全ての辺を順に見ていき、両端点が異なる連結成分に属している辺のコストを足し合わせる。

  • 連結成分の個数を計算する過程で、dsu::groups().size()を用いたため、TLEしてしまった。

ABC 447 E - Divide Graphyuulisio.com favicon

成績

Contest Result - AtCoderatcoder.jp favicon
  • 順位: 2066th / 10735
  • Performance: 1271
  • 1253 → 1255 (+2)

2回ぶりの参加だったが、まあ耐えていると思う。