【AtCoder】Polaris.AI プログラミングコンテスト 2025(AtCoder Beginner Contest 429) コンテストまとめ

コンテスト情報

atcoder.jp favicon

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

A 問題

  • Difficulty: 10 / NoviSteps: 7Q / 解答時間: 1:28

問題概要

正整数 N,MN,M が与えられる。 i=1,2,,Ni = 1, 2, \ldots, N について、 iMi\leq M のときOKを、そうでないときToo Many Requestsを出力せよ。

解答方針

  • forループを回して、条件に応じて出力するだけ。

ABC 429 A - Too Many Requestsyuulisio.com favicon

B 問題

  • Difficulty: 24 / NoviSteps: 6Q / 解答時間: 1:41

問題概要

長さ NN の整数列 AA と整数 MM が与えられる。 AANN 個の要素から 11 個を取り除くことで、残りの N1N-1 個の要素の和をちょうど MM にできるか判定せよ。

解答方針

  • AjA_j を取り除いたとすると、残り N1N-1 個の要素の和は M=i=1NAiAjM = \sum_{i=1}^{N} A_i - A_j となる。
  • これを変形すると Aj=i=1NAiMA_j = \sum_{i=1}^{N} A_i - M であるから、AA の総和を求めたうえで、各要素が i=1NAiM\sum_{i=1}^{N} A_i - M と等しいかを調べればよい。

ABC 429 B - N - 1yuulisio.com favicon

C 問題

  • Difficulty: 201 / NoviSteps: 3Q / 解答時間: 20:50

問題概要

長さ NN の整数列 AA が与えられる。 1i<j<kN1\leq i < j < k \leq N をみたす整数の組 (i,j,k)(i,j,k) であって、次の条件をみたすものの個数を求めよ。

  • Ai,Aj,AkA_i,A_j,A_k の中にちょうど 22 種類の値が含まれる。

解答方針

  • AA の中に 2 回出現する値 vv を固定して考える。
  • AA に出現する要素の個数を連想配列などで数えておき、値 vv の出現回数を cvc_v とする。
  • ある値 vv に注目したとき、
    • AA から vv を 2 個選ぶ選び方は (cv2)\binom{c_v}{2} 通り
    • AA の中で vv 以外の値を 1 個選ぶ選び方は NcvN - c_v 通り
  • したがって、求める答えは v=1N(cv2)×(Ncv)\sum_{v=1}^N \binom{c_v}{2} \times (N - c_v) である。

  • 最初、 AjA_j を固定して数え上げる方針を取ったのだが、考察している途中で上述の「2 回出現する値を固定する」方針の方が楽なことに気づき、そちらに切り替えたので時間がかかってしまった。
  • 最初の方針でも解けなくはなさそうだが、場合分けが面倒臭い。

ABC 429 C - Odd One Subsequenceyuulisio.com favicon

D 問題

  • Difficulty: 903 / NoviSteps: 1Q / 解答時間: 32:09

問題概要

11 周の長さが MM である池があり、その周上に 11 つの小屋と NN 人の人が立っている。 実数 xx (0x<M)(0\leq x <M) について、小屋から時計回りに xx だけ進んだところを地点 xx と定義する。 ii 番目の人は、 地点 AiA_i にいる。

また、NN 以下の整数 CC が与えられ、 i=0,1,,M1i=0,1,\ldots,M-1 について XiX_i を次のように定義する。

  • 高橋君は地点 (i+0.5)(i+0.5) からスタートして、時計回りに動き始める。
  • 高橋君は出会った人数の合計が CC 未満である限り時計回りに動き続け、CC 以上になったら止まる。
  • 高橋君が止まるまでに出会った人数を XiX_i とする。ここで、高橋君が止まった地点に複数の人がいる場合、そこにいた人はすべて出会った人として数えられる。

このとき、 i=0M1Xi\sum_{i=0}^{M-1} X_i を求めよ。

解答方針

  • XiX_i は人がいる地点を通過するときにしか変化しないので、人がいる地点を人数と共にまとめておく。
  • 人数に関して池の 2 周分の累積和を取り、「(スタート地点から始めに人と出会う地点の人数)+C(スタート地点から始めに人と出会う地点の人数) + C を超える一番小さい人数」を二分探索によって求めればよい。
  • ただし、「スタート地点から始めに人と出会う地点」は、小屋を跨ぐときとそうでないときで場合分けが必要。

ABC 429 D - On AtCoder Conferenceyuulisio.com favicon

成績

atcoder.jp favicon
  • 順位: 2264th / 11184
  • Performance: 1105
  • Rating: 1212 → 1202 (-10)

C 問題で時間がかかりすぎた。