見出し画像

ABC346 コンテスト後の回想や復習もろもろ

私です。初めまして。または久しぶりです。最近書くことがなく記事が停滞していました。しかし、昨日いつものごとくAtCoderプログラミングコンテスト(ABC)に出場したため、その感想(完走はできませんでした)を綴っていこうと思います。よろしくお願いします。
こちら今回参加させていただいたコンテストです。
ユニークビジョンプログラミングコンテスト2024 春(AtCoder Beginner Contest 346) - AtCoder


A問題について

A問題については特に何もなく解答できました。私の解答方法は、まず1行目から配列長をとります。その次2行目には整数をlist化して配列にin。ここまで入力受け取りでした。そのあと操作を始めました。操作は最初にfor文でループをするのですが出力例にある通り入力例の配列長と出力例の配列長を比較した結果、出力例の配列長の方が1短いため、1行目の値から1引いた値でループを回しました。あとはループの最初を+1して問題文の通りに計算。出力は最後の配列はend=""でそれ以外はend=" "で通しました。完成です。

B問題について

B問題ですがこれは問題を見て難しそうと思い最初飛ばしてCから解きました。結局コンテスト中にCは解き切れませんでしたが。B問題はまず制約を見ました。100までで入力が収まるそうなので与えられた文字列を200つなげて1文字ずつ区切ったものをlistで配列にしました。そのあと入力された文字であるw,bの数を足し、足された値をworkとします。配列のなかで最初から最後までをworkでスライスして一つずつ動かしていきました。その時に途中でif文でwとbが入力例と正しければYesでexit。最後まで正しくなかったらNoを出力して完成です。

C問題について

これはコンテスト中にACできませんでした。しかしほぼ解法はあっていたので軽くします。まず入力値を受け取ります。問題文に総和とあるため全部足そうと思っていました。しかしTLEになりそうと考え、数学で和を求める方法があったためこちらでは計算量が少なくなりそうです。ちなみに公式はn*(n+1)/2です。Pythonですと後々これでは数値がバグります。それでWAしました。次に問題読み替えをします。配列の中に一度もない総和=総和から配列の数値引くです。しかし渡されたものでは重複があります。これを防いでくれるのがsetです。set神です。ありがとうございます。for文で配列分ループをして配列内の数値を総和から引いています。完成の前にバグった数値を直します。//で実装できるそうです。ありがとうございました。

D以降~

そこまでの実力なかったので問題文読んでません。解いてません。いつか感想書きたいです。

結局のところレートはどうなったんですか

レートはですね、下がりました(><)。Cでやらかしたのが痛いですしB問題を先に解くべきでした。反省の日々です。300あったレートも溶けてきています。(問題は解けてません…)。そろそろD問題にも着手する時期なのかなと思いつつ、D問題の何から手を付けるかわからない自分がいます。bit全探索や動的計画法があやふやな気がするのでなんかしらのコンテストで精進してきます。

終わりに

読んでくださりありがとうございました。技術系の記事を書きたいと思いつつネタ不足でかけてません。気が向いたら書きます。この記事が気に入った方はスキ、何か疑問点や改善点がありましたらコメントの方でお願いします。

この記事が気に入ったらサポートをしてみませんか?