京セラプログラミングコンテスト2022(AtCoder Beginner Contest 271)参加記

2022/10/1に開催された、京セラプログラミングコンテスト2022(AtCoder Beginner Contest 271)に参加しました。

atcoder.jp

ここ最近のコンテストでは、地味な結果が続いており、レートの方も停滞モードが続いております。

今回のコンテストでは、ここいらで大きくパフォーマンスを上げようということで、水パフォを目標として臨むこととしました。

今回の結果

3完で終了しました。。。

ABC271結果
ABC271結果

パフォーマンスは、4桁にすら到達せず。今回は完敗という結果になりましたとさ。

振り返り

C問題でハマってしまい、だいぶ時間をロスしました。

ABC271提出結果
ABC271提出結果

A問題

A - 484558

入力されたNを、丁度2桁の16進数で表示せよという問題。

出力フォーマットを使えれば簡単そうだったが、すぐには使い方が思い出せなかったので、とりあえず16進数の文字列で変換後、1桁だったら0を足すという実装をしました。

2分48秒で1完。

提出コード

https://atcoder.jp/contests/abc271/submissions/35272193

B問題

B - Maintain Multiple Sequences

あまりにもシンプルな問題だという印象だったが、公式解説によると二次元配列を使う練習問題であるとのこと。

とりあえず、N個のListオブジェクトを用意し、入力通りに値を追加。

クエリに対する答えでは、s番目のListオブジェクトのt番目を出力する実装をしました。

8分0秒で2完。

提出コード

https://atcoder.jp/contests/abc271/submissions/35277704

C問題

C - Manga

まず、入力されたaをソートして、キューに突っ込む。

次に、キューを前から参照した時に、1巻から順番にあるかどうかを見て、ない場合は配列の後ろにある2巻を売るという実装をしてみる。

が、提出したら、あえなくWA。。。。

どういうケースで上手く行かないかを考えるも、全く思いつかず。。

残り時間も半分以下になり、このままでは2完爆死しかねないので、仕方なくこの問題は撤退することにしました。

D問題

D - Flip and Adjust

以下のDPを使って解いていく。

  • dp\lbrack i \rbrack \lbrack j \rbrack :=i番目のカードまでの裏表を決めた時に、合計がjになる時の配置方法の文字列

  • dp\lbrack i - 1 \rbrack \lbrack j \rbrack がNullでない場合、以下の遷移を行う

    • dp\lbrack i \rbrack \lbrack j + a_i \rbrack = dp\lbrack i - 1 \rbrack \lbrack j \rbrack + H (表向きの場合)

    • dp\lbrack i \rbrack \lbrack j + b_i \rbrack = dp\lbrack i - 1 \rbrack \lbrack j \rbrack + T (裏向きの場合)

  • dp\lbrack N \rbrack \lbrack S \rbrackがNullの場合はNo、そうでない場合はYes。

以上の実装でなんとかACを取り切りました。

71分45秒で3完。とりあえず、緑パフォぐらいは確保できそう。

提出コード

https://atcoder.jp/contests/abc271/submissions/35307731

E問題

E - Subsequence Path

cost\lbrack i \rbrack :=頂点1からiに到達する時の最小コストを管理する配列として定義。

あとは、配列Eを先頭から見て、E_i番目のパスを使った時に、上記の最小コストを更新できるかを計算していく。

と、ここまでの解法はなんとか思いつきましたが、いかんせん残り時間が少なくて、実装が終わる頃には、コンテスト終了ギリギリの時間。。

ローカルでサンプルが通れば提出するところでしたが、実装をバグらせてしまい、惜しいところで提出できず。結局時間切れ終了となりましたとさ。

F問題

F - XOR on Grid Path

問題すら見れておりません。

G問題

G - Access Counter

問題すら見れておりません。

Ex問題

Ex - General General

問題すら見れておりません。

これまでの実績

停滞モード継続中です(笑)

コンテスト実績
コンテスト実績

総括

今回は、C問題で引っ掛かってしまい、あわや爆死するところでした。

課題としては、問題ではまってしまった時に次の問題に移る判断が遅かったところがあります。

また、Eの実装が間に合わなかったところも、少し入力部分の実装に時間がかかってしまったところが反省点。少し実装にかかるコーディング量を少なくするために、ライブラリを準備した方がいいかと。。

この点を反省して、また次に備えたいと思います。

ということで、また次回も頑張ります。