こんばんわ。
ABC409、お疲れさまでした!
結果報告
今回のコンテストは ACが2問(A・C)で、B・Dは残念ながら未達でした。
5/17以来となるB問題のWAで、なかなか成績が安定しませんが、C問題が解けたことにより、新レートは少し下がっただけの517(−5)でした。
B問題の振り返り
問題概要
数列 Aのうち、ある数字 x より大きい要素が x 個以上あるような最大の x を求める。
本来するべきアプローチ
-
数列Aをソート
-
数列の最大の値から順に条件を確かめる
条件:A[i-1]>= x -
条件を満たしたときの x を出力
ミス内容
本来は「条件を満たす最大の x」そのものを出力すべきところ、ソート後の配列から「最大から x 番目の要素」を出力してしまっていました。
例えば 、ソート後の巣列A[8,6,4,2] の場合、条件を満たすのは x=3の場合 ですが、この時上位から3番目の配列の要素の「4」を出力していました。
今後の対策
-
B問題は計算量許容なことが多いので、愚直に二重ループで条件判定しても十分。
-
問題文→コード化の際、「何を出力すべきか」を改めて意識する。
C問題の解法
初め問題文の「円周 L の円」の L が何を指すか戸惑いましたが、途中でLが「円周」の距離であることに気づき、以下の手順でACを獲得できました。
-
円周Lが3の倍数でない場合は正三角形を作れないので即座に0を出力
-
要素数Lの配列を準備し、各頂点位置を頂点間の距離を足しながら計算し、頂点位置にあたる配列の値をインクリメント
-
正三角形になる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完を目指します。
引き続き応援よろしくお願いします。