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

コンテスト時間: 2026-02-28(土) 21:00 ~ 2026-02-28(土) 22:40 (100分)
A 問題
- Difficulty: 15 / NoviSteps: 7Q / 解答時間: 2:12
問題概要
個の座席が横一列に並んでいて、各座席には最大で 人まで座ることができる。 隣り合う つの席の両方に人が座らないように 人を座席に座らせることができるかどうか判定せよ。
解答方針
- 左から1つおきに座らせていくことを考えると、 ならば
Yesと判定できる。

B 問題
- Difficulty: 50 / NoviSteps: 6Q / 解答時間: 4:32
問題概要
英小文字からなる文字列 が与えられる。 の中で出現回数が最も多い文字をすべて取り除き、残った文字を元の順序を保ったまま連結して出力せよ。 出現回数が最大の文字が複数種類ある場合は、そのすべてを取り除くこと。
解答方針
- の各文字の出現回数を数え、最大の出現回数を求める。
- を先頭から走査し、出現回数が最大の文字でないものを出力していく。

C 問題
- Difficulty: 326 / NoviSteps: 2Q / 解答時間: 12:20
問題概要
英大文字からなる文字列 が与えられる。 あなたは以下の 種類の操作を好きな順序で 回以上行うことができる。
- の好きな位置(先頭および末尾を含む)に文字
Aを つ挿入する。 - に含まれる文字
Aを つ選んで削除する。なお、残った文字は元の順序を保ったまま連結される。
を に一致させることが可能かどうか判定し、可能な場合は必要な操作回数の合計の最小値を求めよ。
解答方針
- まず、 と の両方から文字
Aを全て取り除いた文字列をそれぞれ とする。 ならば、 にすることは不可能。 - そうでないとき、
A以外の文字で と を分割し、それぞれの区間に含まれるAの個数を数える。 の区間に含まれるAの個数を 、 の区間に含まれるAの個数を とする。 - 区間ごとに、 と の差の絶対値を足し合わせる。これが求めるべき答えとなる。

D 問題
- Difficulty: 430 / NoviSteps: 2Q / 解答時間: 9:18
問題概要
A, B, Cの 種類の文字のみからなる文字列 が与えられる。
文字列 に対して、以下で定義される操作を最大で何回操作を行うことができるかを求めよ。
- かつ
A,B,Cを満たす の組を選び、 の 文字目を取り除く。残った文字を元の順序を保ったまま左に詰める。
解答方針
- 以下の3つのカウンターを用意しておく。
cnt_A: これまでに見た文字のうち、Aの個数cnt_AB: これまでに見た文字のうち、Aの後にBが出現するパターンの個数cnt_ABC: これまでに見た文字のうち、Aの後にBが出現し、さらにその後ろにCが出現するパターンの個数
- の先頭から順に文字を見ていき、以下の処理を行う貪欲法が成立する。
- 文字が
Aのとき、cnt_Aを 増やす。 - 文字が
Bのとき、cnt_Aを 減らし、cnt_ABを 増やす。 - 文字が
Cのとき、cnt_ABを 減らし、cnt_ABCを 増やす。
- 文字が
- 最終的に、
cnt_ABCが求めるべき答えとなる。

E 問題
- Difficulty: 955 / NoviSteps: 1Q / 解答時間: 31:08 + WA x 1
問題概要
頂点 辺からなる単純連結無向グラフ が与えられる。各辺にはコストとよばれる値が定められており、辺 のコストは である。
今から、 の連結成分の個数がちょうど になるように、 の辺のうちいくつかを選んで削除する。 削除する辺のコストの和としてありうる最小値を で割った余りを求めよ。
解答方針
- 操作を逆から考え、初めに 個の頂点をそれぞれ独立な連結成分とする。
- 辺のコストの大きい順に見ていき、その辺が接続する2つの頂点が異なる連結成分に属しているなら、両者を merge する。ただし、連結成分の個数が 個になったときは打ち切る。
- その後、全ての辺を順に見ていき、両端点が異なる連結成分に属している辺のコストを足し合わせる。
- 連結成分の個数を計算する過程で、
dsu::groups().size()を用いたため、TLEしてしまった。

成績

- 順位: 2066th / 10735
- Performance: 1271
- 1253 → 1255 (+2)
2回ぶりの参加だったが、まあ耐えていると思う。





