タグ

ブックマーク / qiita.com/hamko (4)

  • Atcoder ABC32 D - ナップザック問題を分岐限定法で爆速で解く - Qiita

    概要 ナップザック問題を分岐限定法で爆速($n<2000, v_i<10^{12}, w_i<10^{12}$を$1$秒)で解きます。実行時間ベースで今のところ3位です。提出はこちら これは競技プログラミング 解説 Advent Calendar 2017の16日目の記事です。 ナップザック問題 ナップザック問題とは、重さ制約$W$と$n$個の荷物価値ペア($v_i, w_i$)が与えられて、$\displaystyle \max_{S \in 2^n, \sum_S w_i \le W} \sum_S v_i$を求める問題です。Atcoder ABC 32 - D - ナップザック問題は、様々な$n$, $v_i$, $w_i$の制約のもとで、この問題を解くという趣旨でした。 この問題は、以下の3つのDP解を、テストケースごとに作成することで通すことができます(提出)。 (1) $n$が

    Atcoder ABC32 D - ナップザック問題を分岐限定法で爆速で解く - Qiita
  • 二値文字列の転倒数が従う群構造 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 概要 二値文字列の転倒数が従う群構造を紹介します。これによって範囲転倒数クエリが、累積和やSegment Treeで計算できます。Segment Treeでできます、という言及は今までに見たことがありましたが、累積和もできるという話は聞いたことがなかったのでまとめます。 二値文字列の転倒数とは、0と1からなる二値文字列 $s$ が与えられて、$s$ をソートするために必要な隣り合った0と1のswap数 $f(s)$ のことです。例えば、$s=101011$ を $001111$ にソートするためには、 $3$ 回のswapが必要なので、

    二値文字列の転倒数が従う群構造 - Qiita
  • 絶対にバグらない二分探索の実装パターンと、それがバグらない5つの理由 - Qiita

    概要 絶対にバグらない二分探索の実装パターンと、それがバグらない5つの理由を紹介します。 めぐる式二分探索と比べると、コーナーケースに強いです(具体的には「解が存在する値」「解が存在しない値」の存在を前提しないので強いです)。 二分探索 二分探索とは、判定関数 $f(x): T \rightarrow bool\ (x \in [s, t))$ が広義単調増加であるときに、 $f(x) = true$ となる最小の$x$を$O(\log (t-s))$で求めるアルゴリズムです。 …が、二分探索は、$T = int$の時、必ずバグることで有名です。何をやってもバグります。 この記事では、以下のC++のコードが、任意の広義単調増加な$f$についてあらゆるコーナーケースに常に正しく動くことを納得させます。 お気持ち 初期値のngには、絶対に$f(x)$がfalseであるような$x$を入れておきた

    絶対にバグらない二分探索の実装パターンと、それがバグらない5つの理由 - Qiita
    agw
    agw 2018/01/10
  • 統計への競技プログラミング基盤の拡張提案と、問題の試作 - Qiita

    概要 競技統計学みたいなのの試作(8問)しました。 競技プログラミング→拡張のモチベーション 競技プログラミングは、広範なアルゴリズムの勉強方法として有用であるだけでなく、生産的で現実的な問題を解くことができます。参加者には、大学の先生をはじめとして、信じられないほど能力の高い人が大勢います。そのような、現実世界で生きているだけでは会うことすらできない人たちと、Twitterやコンテスト基盤を介して活発的にコミュニケーションする文化もあります。また、レーティングによって能力が定量化されるため、人財の発掘による経済的メリットも望めます。 これを統計・ロボット・その他に拡張することは世界にとって有益です。今回、古典的な頻度主義的な統計学の問題を数問作成・模範解答を作って、統計解析がジャッジできそうかどうかを議論できるといいなと思っています。 競技学習基盤の拡張 競技学習基盤はどこまで拡張できる

    統計への競技プログラミング基盤の拡張提案と、問題の試作 - Qiita
  • 1