れとろのメモ置場

とあるSEのメモ置場

サイシードプログラミングコンテスト2021(AtCoder Beginner Contest 219)

サイシードプログラミングコンテスト2021(ABC219)に参加しました。

結果

A,B,C問題の3問正解でパフォーマンスが960でした。 D問題でDPをバグらせて原因を探すのに時間がかかりすぎた...

コンテスト中に突然PCがフリーズして焦った。最近ちょっとPCの調子が悪いから困る。買い換えるにしても新しいWindowsが出てからにしたいし。

A - AtCoder Quiz 2

問題文のとおりに処理をする。 if文でどのランクになるか判定して、次のランクの最低点との差を計算して出力する。 入力された点数がすでにエキスパートの時だけは文字列を出力するので例外的に処理が必要。

B - Maritozzo

これも問題文のとおりに処理をする。 Tを1文字ずつ読み取って、それに応じてどの文字列を連結するか判断して処理する。
C++なら読み取ったTの文字から'0'を引くと数値として1,2,3になるのでその後の処理がしやすい。(Sを配列に入れておけばT _ {i} - '0' -1 = 配列Sのインデックスになって楽)

C - Neo-lexicographic Ordering

入力された文字列を別途決められた基準でソートする問題。
手っ取り早くsortで使うようの大小比較用関数を作成してソートした。

D - Strange Lunchbox

問題文を読むとDPかbit全探索で解けそうだなと思いつつ、制約を見て2 ^ {300}は2秒で処理しきれないと判断してDPで解くことにした。 問題の内容的にDP[i][j] = i種類目中j個買った場合のたこ焼きの数とたい焼きの数 といった具合に2次元の配列=pairで処理しようとしてみた。 DPの更新でバグらせて直すのに時間がかかり、直ったけどWAがいくつかあって結局間に合わなかった。最近DPを書いてなかったから初歩的なミスでバグらせてた。

解説を見ると素直にDPを3次元で解けばよかっただけだった。試しにDPを3次元で説いてみるとあっさりACできたしちょっと惜しかったなあ。