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

コンテスト情報

atcoder.jp favicon

コンテスト時間: 2025-11-01(土) 21:00 ~ 2025-11-01(土) 22:40 (100 分)


新ジャッジシステムの運用後初の ABC であった。

また、今回から AtCoder 初参加者の内部レートが上方修正されたらしい。

atcoder.jp favicon

A 問題

  • Difficulty: 18 / NoviSteps: 7Q / 解答時間: 3:57 + WA x1

問題概要

「飴を AA 個以上所持している人はクッキーを BB 個以上所持していなければならない」という法律がある。

高橋君は飴を CC 個、クッキーを DD 個所持している。 高橋君がこの法律に違反しているかどうか判定せよ。

解答方針

  • CAD>BC \geq A \land D > BであるならYes、そうでなければNoを出力する。

  • 最初、「クッキーを BB 個以上所持してはならない」と誤読したし、 DBD \geq B と typo して 1 ペナ。何をやっているんだ?

ABC 430 A - Candy Cookie Lawyuulisio.com favicon

B 問題

  • Difficulty: 141 / NoviSteps: 4Q / 解答時間: 5:23

問題概要

NNNN 列からなるグリッドがあり、グリッドの上から ii 行目左から jj 列目のマスは、Si,jS_{i,j}#のとき黒く、.のとき白く塗られている。

このグリッドから縦 MM 行横 MM 列の領域を取り出して得られるマスの塗られ方は何種類あるか。

解答方針

  • M×MM \times M の領域を取ってきて、それをvector<string>などで保存し、setに入れていく。
  • 最後にsetのサイズを出力すればよい。

ABC 430 B - Count Subgridyuulisio.com favicon

C 問題

  • Difficulty: 750 / NoviSteps: 2Q / 解答時間: 9:55

問題概要

a, bからなる長さ NN の文字列 SS と正整数 A,BA,B が与えられる。 以下の条件を全て満たす整数組 (l,r)(l,r) の個数を求めよ。

  • 1lrN1\leq l \leq r \leq N
  • SSll 文字目から rr 文字目までに含まれるaの個数が AA 以上
  • SSll 文字目から rr 文字目までに含まれるbの個数が BB 未満

解答方針

  • ll を固定して、条件を満たす rr の個数を数える。
  • SS の各文字までのabの個数の累積和ai,bia_i, b_iを取り、ll を固定したときに以下の 2 条件を満たす rr をそれぞれ二分探索で求める。
    • ar+1al+Aa_{r+1} \geq a_{l} + A
    • br+1<bl+Bb_{r+1} < b_{l} + B
  • これらの差が、条件を満たす rr の個数となる。

ABC 430 C - Truck Driveryuulisio.com favicon

D 問題

  • Difficulty: 982 / NoviSteps: 1Q / 解答時間: 36:23

問題概要

数直線があり、最初は座標 00 に人 00 がひとりで立っている。

これから、人 1,2,,N1,2,\dots,N がこの順に到着し、人 ii は座標 XiX_i に立っていく。 人が到着するたびに、以下の問いに答えよ。

  • 現在数直線に人 0,1,,r0,1,\dots,rr+1r+1 人が立っているとする。
  • このとき、 did_i を「人 ii に最も近い別の人までの距離」と定義する。
  • i=0rdi\sum_{i=0}^r d_i を求めよ。

解答方針

  • 新たに人が到着したときに、 did_i の値に影響を受けるのは、新たに到着した人と(もし存在すれば)その左右の人だけである。
  • したがって、 di\sum d_i の差分として、新たに到着した人とその左右の人に関する did_i の和の差分だけを考えればよい。
  • 人の位置を管理するためにsetを用いることで、二分探索によって新たに到着した人の左右の人を高速に求めることができる。

ABC 430 D - Neighbor Distanceyuulisio.com favicon

E 問題

  • Difficulty: 1109 / NoviSteps: 1D / 解答時間: 21:42

問題概要

0, 1からなる長さの等しい文字列 A,BA,B が与えられる。

AA に対して以下の操作を 00 回以上行うとき、 A=BA=B とするために必要な最小の操作回数を求めよ。

  • AA の先頭の文字を末尾に移動させる。

解答方針

  • 文字列 AA の左シフトを行うということで、これは A+AA + A という文字列から連続部分文字列 BB を探す問題に帰着できる。
  • これには色々な解き方があると思うが、私は KMP 法を用いて計算量 O(A)O(\sum |A|) で解いた。

  • Z-algorithm なら実装が ACL にあるので瞬殺できるらしい。

ABC 430 E - Shift Stringyuulisio.com favicon

成績

Contest Result - AtCoderatcoder.jp favicon
  • 順位: 997th / 9766
  • Performance: 1370
  • Rating: 1202 → 1220 (+18) Highest 更新!

A ~ E まで割とスムーズに解くことができた。

今回参加者少なくね?