れとろのメモ置場

とあるSEのメモ置場

パナソニックグループプログラミングコンテスト2022(AtCoder Beginner Contest 251)

パナソニックグループプログラミングコンテスト2022(AtCoder Beginner Contest 251)に参加しました。

結果

A,B,Cの3問ACで、パフォーマンスが1082でした。

D問題は問題を読んで難しそうなので一旦E問題を読んで、解きやすそうなE問題を先に解いてみた。 提出者数とか正解者数を比べるとD問題よりE問題の方が多いのでみんなD問題を飛ばしてE問題を先に解こうとしたみたい。

C問題までは10分少々でACできてコンテスト中の殆どの時間を使ってD問題以降を解こうとしたけど1問も解けなかった…
最近あんまり精進していないから解ける問題のレパートリーが増えてなくて、今までの蓄積+地力で解ける問題しか対応できてない。

A - Six Characters

問題文の通り文字列を表示させる。

文字列を何回か繰り返し連結して先頭から6文字の部分文字列を出力させたり、 for分とかのループで i%(文字列の長さ)番目の文字を6回表示させたり、解き方は色々ある。

B - At Most 3 (Judge ver.)

全通り探索すれば解ける問題。

選ぶ重りは3個以下なので1個、2個、3個の場合それぞれをループで探索して確認すれば良い。 重りの数Nもたかだか300程度なので3重ループで探索してもTLEにはならない。

C - Poem Online Judge

重複があるかもしれない文字列集合の中から、初めて登場した文字列を対象に文字列に紐づく点数の最高点は何番目の文字列かを探索して答える問題。

マップで文字列が出てきたかどうかのフラグを管理して、確認した中での最高点とその時の提出番号を控えつつ
初めて登場した文字列の場合は、マップのフラグを更新。点数を確認して最高点が変わる場合は最高点と提出番号を更新する。 最後に控えていた提出番号を表示させた。

文字列が既出かどうかの判定はマップを使う以外でもできそう。例えばsetに確認済みの文字列を保存していき、今から確認しようとしている文字列をsetに入れる前後でsetのサイズが変わるかどうかで その文字列が新規か既出か判断できそう。

E - Tahakashi and Animals

もう少しで解けそうで解けなかった…

問題自体はDPを使えば解けそう。DP[i番目の行動を][する・しない]=費用の最小値 でi=1から順番に更新していけば答えが求められそう。 問題は行動1と行動Nで動物1に餌をやることが被るのでその部分がややこしいなと思った。

解説を読んでみると行動1を行う場合・行わない場合を固定して解いてそれぞれの結果をマージすれば良いっぽい。
このパターンはこういう解き方をするっていうのが決まっている典型パターンの1つみたい。