プロコン昨日こんなことをし始めました。hyoga.hatenablog.comただ、今の自分は黄色手前の青。div1Easyは流石に解けていないといけない領域です。いうことで、一緒にMedも解くことで精進をしよう!というのが本来の趣旨です(絶対分かるかこんなん)問題2次元平面に多角形を作りましょう。以下のルールがあります。全ての点は格子点上に存在する周の長さが丁度L(integer)この制約下で、「最も辺の数が少ない」多角形を見つけてください。存在しないなら-1、存在するなら、その中で最も「最長の辺の長さ-最短の辺の長さ」が小さいものを見つけ、その評価値(=最長-最短)を返してください。1≦L≦5,000です。四角形は絶対作れるので、Lが4以上の偶数の時はOKです。逆にL=1,2,3は全部-1。三角形を作ることを考えましょう。1点は原点でOKで、もう2点をループ回すと当然死にます...流石に三角不等式から探索範囲は2,500×2,500に絞られるとしても無理です。ところで、辺の長さが整数で無い場合死にます。いうのも、根号を加算で消滅させることは出来ないので。いうことで、L/2×L/2の中で辺の長さ毎にvectorに突っ込んでいきます。判定は適当にd=getDist→dd=xx+y*yとしました。その後、1辺目の長さ→頂点1つ目→2辺目の長さ→頂点2つ目でループを回します。すると、検出される点は全て原点からの距離計算の時、x軸上y軸上に無い時は「直角三角形の斜辺」に相当します。これは1組しかないので、各長さの点の個数は高々4個(多分)。いうことで、計算量がO(L2)に収まります。その中で最後の辺の長さが丁度良ければその評価値の最小値を求めて終わり。この際、サンプルに引っかかるので3点が1直線に並ぶ場合を外します。ところで、周の長さが奇数になる三角形は存在しなさそうです(実験)。五角形以降は考えてない(白目)けど、それなりに実験重ねて「奇数長で作るのは無理!」って投げたら通りました。...「3月中に毎日1問解いて黄色になろう!」キャンペーン11問目。...「3月中に毎日1問解いて黄色になろう!」キャンペーン8問目。日)ネットの海に生息するらしいバーチャルグソクムシ。競プロとCTFをメインに、たまにEsolangを混ぜます。(7)月別アーカイブリンクGitHubはてなブログをはじめよう!Hyogaさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。