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

コンテスト情報

AtCoder Beginner Contest 466 - AtCoderatcoder.jp favicon

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

A 問題

  • Difficulty: 16 / NoviSteps: 7Q / 解答時間: 1:47

問題概要

NN 個の選択肢があり、 ii 番目の選択肢を選んだときの嬉しさは XiX_i である。 どの選択肢を選んでも嬉しさが負になる場合はYesを、そうでない場合はNoを出力せよ。

解答方針

  • 全ての ii について Xi<0X_i < 0 が成り立つかどうかを判定すればよい。

ABC 466 A - Compromiseyuulisio.com favicon

B 問題

  • Difficulty: 37 / NoviSteps: 6Q / 解答時間: 2:12

問題概要

NN 個のボールがあり、 ii 番目のボールの色は CiC_i 、大きさは SiS_i である。 k=1,2,,Mk = 1, 2, \ldots, M について、色 kk のボールの大きさの最大値を出力せよ。

解答方針

  • ボールの色ごとにsetを用意して、その大きさを格納していく。
  • その後、各 kk について、対応するsetの末尾の値(最大値)を出力すればよい。

ABC 466 B - Representative Ballsyuulisio.com favicon

C 問題

  • Difficulty: 658 / NoviSteps: 2Q / 解答時間: 8:38

問題概要

最初、あなたには整数 NN のみが与えられる。 その後、あなたはジャッジに以下の質問を 2N2N 回まで行うことができる。

  • ? i j: 1i<jN1 \leq i < j \leq N を満たす整数 i,ji,j を選び、点 ii と点 jj の距離が 11 以下であるか質問する。

距離が 11 以下の 22 点組の個数 XX を出力せよ。

解答方針

  • ii に対して、自身よりも右側にあって、距離が 11 以下のもので最大の番号の点を rir_i とすると、点 ii と組にできる点の個数は riir_i - i 個であるから、これを全ての ii について求めて足し合わせればよい。
  • ここで、組 (i,ri)(i, r_i) の距離が 11 以下であるなら組 (i+1,ri)(i+1, r_i) の距離も 11 以下であることから、尺取り法の要領で rir_i を単調増加に求めることができる。
  • 質問回数は最大でも 2(N1)2(N-1) 回で済む。

  • ABCでは超久々のインタラクティブ問題でビビった。
  • ...ただ、よく見たら単なる尺取り法だったので一安心。
  • インタラクティブ問題が忌避され過ぎて、D問題と Diff が逆転してしまっている。

ABC 466 C - Count Close Pairsyuulisio.com favicon

D 問題

  • Difficulty: 494 / NoviSteps: 2Q / 解答時間: 17:15 + WA x1

問題概要

N×NN \times N のマス目があり、最初、マス目の上には何も置かれていない。

マス目に対して、以下の操作を MM 回行う。

  • 上から RiR_i 行目のマスに置かれているコマをすべて取り除く。
  • 次に、左から CiC_i 列目のマスに置かれているコマをすべて取り除く。
  • 最後に、上から RiR_i 行目かつ左から CiC_i 列目のマスにコマを置く。

MM 回の操作の後でマス目に置かれているコマの個数を出力せよ。

解答方針

  • ii 回目の操作で駒がマス (Ri,Ci)(R_i, C_i) に置かれたとすると、最終的にマス (Ri,Ci)(R_i, C_i) に駒が残るためには、以下の両方の条件を満たす必要がある。
    • RiR_i に対して最後に行われた操作が ii 回目の操作であること
    • CiC_i に対して最後に行われた操作が ii 回目の操作であること
  • この条件を満たす ii の個数を数えればよい。

  • 行・列の最後の操作回を記録する配列の長さを間違えて1ペナ。
  • なんでサンプル通っちゃうの...?

ABC 466 D - Placing Rooksyuulisio.com favicon

E 問題

  • Difficulty: 1027 / NoviSteps: 1Q / 解答時間: 33:06

問題概要

NN 枚のカードが並んでいて、カードには 1,2,,N1, 2, \ldots, N の番号が付けられている。 カード ii の表面には整数 AiA_i が、裏面には整数 BiB_i が書かれており、はじめ、すべてのカードは表面が上を向いている。

これから、以下の操作を高々 KK 回行うことができる。

  • 1lrN1 \leq l \leq r \leq N なる整数 l,rl, r を選ぶ。lirl \leq i \leq r なる各整数 ii について、カード ii を裏返す。

操作を終えた後、各カードの上を向いている面に書かれている数の総和として考えられる最大値を求めよ。

解答方針

  • 重複した区間の操作は考える必要がないことをに気づければ、 Di=BiAiD_i = B_i - A_i とおくことで、問題を以下のように言い換えることができる。
    • 長さ NN の数列 (D1,D2,,DN)(D_1, D_2, \ldots, D_N) が与えられるので、高々 KK 個の互いに重ならない区間を選び、その区間に含まれる整数の総和を最大化せよ。
  • これは、以下の2つのDPテーブルを定義することで、動的計画法によって解くことができる。
    • dp0[i][j]:=\mathrm{dp}_0[i][j] := ここまでに jj 個の区間を選び、カード ii を裏返さない場合の DiD_i の総和の最大値
    • dp1[i][j]:=\mathrm{dp}_1[i][j] := ここまでに jj 個の区間を選び、カード ii を裏返す場合の DiD_i の総和の最大値
  • 初期値は、 dp0[0][0]=0\mathrm{dp}_0[0][0] = 0 であり、他の値は -\infty とする。
  • 遷移は以下のようになる。
    • dp0[i][j]=max(dp0[i1][j],dp1[i1][j])\mathrm{dp}_0[i][j] = \max(\mathrm{dp}_0[i-1][j], \mathrm{dp}_1[i-1][j])
    • dp1[i][j]=max(dp0[i1][j1],dp1[i1][j1])+Di\mathrm{dp}_1[i][j] = \max(\mathrm{dp}_0[i-1][j-1], \mathrm{dp}_1[i-1][j-1]) + D_i
  • 最終的な答えは、
    • max(dp0[N][j],dp1[N][j])(j=0,1,,K)\max(\mathrm{dp}_0[N][j], \mathrm{dp}_1[N][j]) \quad (j = 0, 1, \ldots, K)
    • これに i=1NAi\sum_{i=1}^{N} A_i を加えた値となる。

ABC 466 E - Range Flipyuulisio.com favicon

成績

Contest Result - AtCoderatcoder.jp favicon
  • 順位: 1786th / 13301
  • Performance: 1439
  • 1375 → 1382 (+7) Highest更新!

まさかここでインタラクティブ問題が出てくるとは思わなかった。 AHCで慣れててよかったー