−目次
日本レジストリサービス(JPRS)プログラミングコンテスト2025#1(AtCoder Beginner Contest 392)F,G問題メモ
F - Insert
問題文
- 空の配列 があります。 の順に以下の操作を行います。
- 数 を、 の前から 番目の位置になるように挿入する。
- より正確には、「 の 項目まで」「 」「 の 項目以降」をこの順に連結したもので を置き換える。
- 全ての操作を終えた後の を出力してください。
制約
- 入力は全て整数である
解法
以下の例で考えてみる。
i 1 2 3 4 5 6 P 1 2 2 1 3 2 ■A の作られ過程 1 1 2 1 2 3 1 3 2 4 4 1 3 2 5 4 1 5 3 2 6 4 6 1 5 3 2
わかりやすいところでは、 例えば最後の は、挿入後、(最後なので当然)自身の前に割り込む要素がないので、 最終状態でも の示す通り、先頭から2番目の位置に置かれている。
は、挿入後、 という1つの要素に割り込まれるので、最終状態では 番目に置かれている。
基本的には が大きい方が、自身の処理後に割り込む候補となる数が少ないので、考えやすそうである。
の大きい方から処理することを考えると、以下のような問題に言い換えることができる。
- 長さ の配列 があり、各要素は null で初期化されています。
- の順に以下の操作を行います。
- の中の null のうち、先頭から 番目に を置く。
i 1 2 3 4 5 6 P 1 2 2 1 3 2 6 _ 6 _ _ _ _ 5 _ 6 _ 5 _ _ 4 4 6 _ 5 _ _ 3 4 6 _ 5 3 _ 2 4 6 _ 5 3 2 1 4 6 1 5 3 2
SortedSetなど、「 番目の要素を取得する」「要素 を消す」という2つの処理を行えるデータ構造で実現できる。
最初、 としておいて、 ごとに以下をすればよい。
- の残っている要素の 番目を取得する。 とする。
- とする。
- から を削除する。
G - Fine Triplets
問題文
- 整数 ( ) が を満たす時、 を 良い三つ組 と呼びます。
- 要素からなる正整数の集合 が与えられるので、 なる良い三つ組の個数を求めてください。
制約
- 入力は全て整数
- の要素は相異なる
解法
仮に以下が分かっていたとすると、
- 「 となる ペアの個数」
を固定したときの良い三つ組の個数は、 で取得できる。
そして は畳み込みで求められる。
- が に含まれるなら1、それ以外は0
同士を畳み込んだ数列を とすると、 となる。
は、 となる が に含まれる場合 、それ以外は となる変数とする。
( で2回数えられる分と、 自身が1回数えられている分)
ここから が求められる。

