こんばんわ。

ABC409、お疲れさまでした!

結果報告

今回のコンテストは ACが2問(A・C)で、B・Dは残念ながら未達でした。
5/17以来となるB問題のWAで、なかなか成績が安定しませんが、C問題が解けたことにより、新レートは少し下がっただけの517(−5)でした。


B問題の振り返り

問題概要
数列 Aのうち、ある数字 x より大きい要素が x 個以上あるような最大の x を求める。

 

本来するべきアプローチ

  1. 数列Aをソート

  2. 数列の最大の値から順に条件を確かめる

     条件:A[i-1]>= x
  3. 条件を満たしたときの x を出力

 

ミス内容
本来は「条件を満たす最大の x」そのものを出力すべきところ、ソート後の配列から「最大から x 番目の要素」を出力してしまっていました。
例えば 、ソート後の巣列A[8,6,4,2] の場合、条件を満たすのは x=3の場合 ですが、この時上位から3番目の配列の要素の「4」を出力していました。

 

今後の対策

  • B問題は計算量許容なことが多いので、愚直に二重ループで条件判定しても十分。

  • 問題文→コード化の際、「何を出力すべきか」を改めて意識する。


C問題の解法

初め問題文の「円周 L の円」の L が何を指すか戸惑いましたが、途中でLが「円周」の距離であることに気づき、以下の手順でACを獲得できました。

  1. 円周Lが3の倍数でない場合は正三角形を作れないので即座に0を出力

  2. 要素数Lの配列を準備し、各頂点位置を頂点間の距離を足しながら計算し、頂点位置にあたる配列の値をインクリメント

  3. 正三角形になる3頂点の組み合わせ数を乗算していく

    例えば、L=12の場合は、 頂点位置は、「0,4,8」、「1,5,9」、「2,6,10」、「3,7,11」となり、例えば「0,4,8」の頂点位置の点の数が、「2,3,2」だとすると2×3×2=12が正三角形の数となります。
 

D問題の所感

ざっと解説を読んだ限り、自分の考え方は大きく間違っていませんでした。
もう少し落ち着いて読み進められれば、解答までたどり着けたと思います。

また、復習をしていきたいと思います。


今後の課題

  • 問題文からコードへの落とし込み精度向上

  • コンテスト中のペース配分と見直し時間の確保

次回こそ、B問題も確実にクリアし、4完を目指します。
引き続き応援よろしくお願いします。