れとろのメモ置場

とあるSEのメモ置場

ユニークビジョンプログラミングコンテスト2024 春(AtCoder Beginner Contest 346)

ユニークビジョンプログラミングコンテスト2024 春(AtCoder Beginner Contest 346)に参加しました。

結果

A,B,Cの3問正解でした。

D問題以降が全然解けなかった。
D問題は問題を読んだ感じだとDPっぽいと思いつつ条件を満たすのはどうすればいいんだろうなあと悩んで解けなかった。 E問題は全然わからなかった。2次元のセグメント木でも実装できれば簡単に処理できそうだなあと思った。

A - Adjacent Product

問題文の通り処理する問題。

N個数値を受け取るのでi番目とi+1番目の積を順番に出力する。
標準入力と数値計算と標準出力ができれば解ける問題。

B - Piano

鍵盤が無限に長いピアノの白鍵と黒鍵をwとbで表した時、白鍵と黒鍵の数(W,B)が指定された数になる区間があるかどうかを答える問題。

鍵盤1周期が12文字で表されるので数える時の開始位置を12通り試しながら、 開始位置からW+B個分の鍵盤の色を数えていき指定した数と一致するかどうかで確認できる。

文字列に0-インデックスでランダムアクセスできるなら、 文字列[index]のindexを鍵盤の長さで割った時のあまりに置き換えることでindexを+1し続けても、 参照する位置が文字列の最後から先頭へループしてくれるので 色を確認してカウントする作業に専念できる。

C - Σ

正整数Kと数列が与えられるので、 K以下の整数のうち数列に含まれない整数の総和を求める問題。

K以下の総和は(K+1) \times K /2で計算できる。 そこから、数列に含まれるK以下の数を各種1回ずつ引いていけば答えが求められる。

数列には同じ値が複数存在する可能性があるので数列の中身をsetに入れて重複する値を除去すれば、 各数値を1回だけ処理することができる。