れとろのメモ置場

とあるSEのメモ置場

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

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

結果

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

C問題でつまらないバグがなかなか見つけられずだいぶ時間を無駄にした…

DDoSの対策ができたみたいだから参加したけど、最後の数分間で503とか504とか出て提出したかったのにページ遷移できなかった。 まだ対策が十分には間に合っていないのかな。

A - Overall Winner

AとTで作られた文字列が与えられるから、文字数が多い方を出力する問題。 文字数が同じ場合は先にその回数分登場した方の文字を出力するのが少し厄介。

基本的にはAとTの数を数えて多い方を出力する。 もしX回で同じだったら先にX回出てきた方を答えれば良いので、文字列の最後じゃない方の文字を出力すれば良い。

B - Fill the Gaps

数列が与えられるので、2項間の差が1より大きいならその間を埋めるようにカウントダウン(カウントアップ)した数字を追加した数列を作って出力する。

数列を標準出力すれば良いので、数字を2つ受け取ると一方からもう一方までを順番にカウントダウン(カウントアップ)しながら出力する関数を作って対応した。
そうすれば与えられたの数列の先頭から順番に2つずつ数字を渡すだけて答えとなる数列を標準出力してくれる。

C - AtCoder Cards

英字と@で作られた文字列が2つ与えられるので一方を並べ替えてもう一方と同じ文字列にできるかどうかを答える。 文字列にある@はatcoderのどれかに置き換えられるのがちょっと面倒な点かな。

一方の文字列を実際に並び替えて解くのは面倒なので、各文字が何個含まれるかを数えて文字列間で文字数を比較する。
各英字の文字数が異なるなら基本的には一方をもう一方と同じ文字列にはできない。 例外としてa、t、c、o、d、e、rの6種類は@から置き換えられるので、これらの文字が足りない場合は@の数も考慮して文字数を比較する。