カメヲラボ

主にプログラミングとお勉強全般について書いてます

競プロ日記005: ABC272と息抜きコードゴルフ

ABC参加5回目

ABCのレーティング2022年10月10日現在

土曜日の朝から鼻水大洪水でしたが,走れば治るやろの精神でABC272に参加しました.ABCDの4問を解いて,Eを愚直な方法で書いたあと時間内に収めるための方法を考えている間に時間切れというかんじ.Eは後でいろいろと試してみたけど,前処理として解に関与しなさそうなAを取り除いておくことで時間内に収まりました.正直あんまりよくわかってないけど,とりあえず通ったのでヨシということにしておきました.

Bで問題を誤読していたので10分くらいロスがあった気がしますが,それがなくても100分で5問解くのは結構しんどそうです.

とりあえず早解き技能なのかな?

5回のパフォーマンス

5回のパフォーマンスを見てみると大体同じような数値になっているので,現時点での実力はこんなもんなんでしょう.ということで,そろそろ次のステップに進むのも良いかもしれません.TwitterのTLを見る限り,相当な上級者でない限りは全問解けてなくても大丈夫そうで,むしろA~D辺りをミスなく短時間で解いた方が良いように見えます.だとすると,知識を増やすよりまずはスピードアップを目指すのが一番ですね,たぶん.

2回目以降の参加時は,前参加したフォルダを丸ごとコピーして,前のコード部分を消して新たにコードを書くということをやっているので,まずこの辺で無駄操作によるロスがある.あと入力サンプルをその都度コピペしているのも結構無駄の多い操作かなぁ.

順位表とか全然見てなかったけど,後から見てみたらA問題を数十秒で通している人もいるんですね.そして4問正解が1000人以上もいて,単純に解答速度だけでそれくらいの順位差が出るということなので,スピード重視ということで間違いなさそう.しかし問題を開いて,読んで,コード書いて,動かしてみて,提出なんて間違いなく1分以上かかるんですけど…皆さんスゴ過ぎ!

息抜き

TwitterのTLを眺めてたら,A問題はfor文を使わなくても解けるみたいなことが書かれていた(気がする)(どのツイートか覚えていなくてごめんなさい)ので,ABC272のA問題で,Cで試しに書いてみました.これは与えられた入力値の合計を計算して出力する問題です.

s,a;main(k){~scanf("%d",&a)?main(s++?k+a:0):printf("%d",k);}

合計値を保持する変数をkとします.scanfで1つ整数値を読み込んで(aに代入),1つ目の値はデータ数で合計値に必要ないので,この場合にkを0にセットしています.2番目からはkに足し合わせるようにしました.カウンタには変数sを使いました.確かにfor文を使わずに書けます.ABCの問題はよく考えられていて素晴らしいですね!

…とまあ,懐かしいネタを久しぶりにやるとあなごるとかやりたくなってきますが,我慢してアルゴ力を鍛えることにします😣