300回言ってるけど x^-1 = (MOD % x) ^ -1 * (- MOD / x) 、マジで天才

1. はじめに はじめまして!高校 2 年生の square1001 です。 私は主に「競技プログラミング」に取り組んでいます。情報オリンピックの世界大会の日本代表になったり、TopCoder や AtCoder などのプログラミングコンテストにも出場したりしています。コンテストに出場するだけでなく、問題の作成も積極的にやっています。 ところで、みなさんは、「日本数学オリンピック」という大会を知っていますか?これは、日本全国の高校生以下を対象にした、数学の問題解決能力を競う、全国的にとても有名な大会です。本記事では、日本数学オリンピックの予選で出題される問題を、難しい数学的知識や数学的考察を使わずに、「コンピューターの高い計算能力」と「アルゴリズムの力」でチャレンジしてみます! 導入 - コンピューターが世界を変えた! プログラミングを実務などでやっている方の中には、「システムやアプリケー
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 基本的アルゴリズム(幅優先探索など)から応用(経路復元、拡張ダイクストラなど)まで、最短経路問題に関するアルゴリズムを総特集しました。 基本的なグラフ理論の用語については、次を参考にしてください。 グラフ理論 用語集 queueなどのデータ構造の用語については、次のスライドの後半を参考にしてください。 C++ STL講習会 by @e869120 最短経路問題とは 一般的に、次のような問題とされます。 $V$ 頂点と $E$ 辺からなるグラフが与えられる。頂点 $u$ と 頂点 $v$ を結ぶパスのうち、重みの総和が最も小さいものはどれ
新ABCになって、6問制になってから、2020/1/6現在まで、Z-algorithmは二回(500, 600)出題されてます。これからも継続して出そうな「文字列照合」で強力なツールとなるZ-algorithmですが、既存資料たちは非常によく説明されていますが、どこか筆足らずのような印象を受けました。 そこで、この記事でZ-algorithmに絞った説明、実際の挙動の説明、実装例を紹介します。 以下のページ、PDFを参考にしてます。 snuke.hatenablog.com 文字列アルゴリズム from HCPC: 北海道大学競技プログラミングサークル www.slideshare.net Z-algorithmで何ができるか? 文字列Sに対して、S[i : j]という記号を、Sのi番目からj番目(いずれも0-idx)までの連続部分文字列とします。 例えば、S="abcde"で S[1 :
Code Readingを読んで、ループ性能(妥当性)に関しての議論を考えるときに、有効な手段があると書いてあった。「バリアント(variant)」と「インバリアント(invariant)」という概念を使う方法だ。「バリアント(variant)」とは、変わりやすいとか変更されるといった意味を持っている。 逆に「インバリアント(invariant)」は、変わらないとか不変なとかという意味を持っているらしい。 この「バリアント(variant)」と「インバリアント(invariant)」を使って、ループ構造が正しいかを証明する方法が、Code Readingの2章に載っていたので、忘れないうちに復習しておきたいと思います。 それにしても、Code Readingは面白いですね。技術者のツボをついた本だと思います。 概要と解説 ループ処理の開始と終了の時点で共に成り立つ条件をループインバリアント
ループ不変条件(英: Loop invariant)とは、計算機科学において、ループの不変条件のこと。ループとは、繰り返し実行されるコードのこと。ループの不変条件とは、ループ実行前にも、反復を実行するたびにも成立する条件のこと。これは、論理アサーションであり、アサーションを使ってコードが書かれることもある。不変条件を知ることは、ループの意味を知るのに重要である。 形式的検証において、特にホーア論理を使った方法では、ループ不変条件は形式的な述語論理で表現され、ループの特徴やループのアルゴリズムを証明するのに使われる。ループ不変条件はループに入る前の段階でも真であり、ループを繰り返すたびにも真である必要がある。これは、ループが終了する際には、ループ不変条件とループ終了条件の両方が真であることが保証される。 ループと再帰の基礎的な類似性により、ループ不変条件を使いループの部分的な正しさを証明する
自分は孫弟子にあたるらしいRichard E. Korf 先生の論文紹介です。 会ったことないですがKorf先生→ https://www.youtube.com/watch?v=EnX8cQPiB1M https://www.youtube.com/watch?v=TAjyI06Q1x8 IDAはAと同じく最適解を返すアルゴリズムですが、A*と異なり メモリ使用量が線形 であるという違いがあります。 Iterative Deepening Depth First Search だれだ反復深化深さ優先探索なんて長ったらしい名前を付けたのは。 反復Xは長いのでIDDFSと呼びましょう。 IDDFSは、ダイクストラの深さ優先版です。 ダイクストラやA*などの最良優先探索系、もとい幅優先探索系に共通する問題は、OPENリストを全部メモリに確保しておかないといけないという点です。 しかし、実際のコ
厳しい。年始早々厳しさを感じている。自分のプログラミング力にだ。伸び悩んでいる。 端的に言って、数学力のなさが自分のプログラミング能力に制限をかけている。例えばこの問題。 560. Subarray Sum Equals K 入力として与えられる配列 nums のうち、合計が k となる部分配列の個数を数え上げよ。どうも有名な問題らしいが… まず大前提として、部分配列なので i, j の2重ループで始点・終点を定めて sum(nums[i, j]) = k になるものを数え上げれば必ず答えが得られる。最悪計算量は O(N^3) ただし i < nums.length < 20000 という制約があるので N^3 では遅すぎるから何か考えてくださいというのがスタート地点。 ここで、結果の変わらない累積和を何度も求めているので nums[i, j] = k を求めたい場合、 nums[0, j
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 今日は、競プロの計算量解析でよく出てくる、調和級数と割り算で出てくる項数の話をします。 計算量解析に失敗すると、実は解ける解法なのに解析に失敗したせいで解けないと思い込んでしまい、解かなかった、みたいなことが起こりかねないので、特に非直感的なこの2つについて押さえておきましょう。 調和級数 調和級数とは、$\sum_{n=1}^k \frac{1}{n}$ で表される級数です。 $k \rightarrow \infty$ とした時に正の無限大に発散することが知られていますが、発散は非常に遅いです。 さて、この調和級数は計算量解析にしば
0. はじめに 今回は行列木定理(Kirchhoff's theorem)の証明を紹介してみようと思います。 行列木定理とは、全域木の個数の数え上げに関する定理です。証明方法はいくつかありますが、今回は漸化式を用いた全域木の個数の数え上げとの対応を見ることで定理を証明してみたいと思います。 1. 定理の内容 頂点数$n$のループを含まない多重無向グラフ$G$が与えられたとします。対角成分に頂点の次数を並べた行列から、隣接行列*1を引いたものをラプラシアン行列といいます。つまり、$G$に対する$n$×$n$ラプラシアン行列$L=(l_{ij})$は$$\begin{aligned}l_{ij}=\begin{cases}\text{頂点iの次数}&(i=j)\\ \text{頂点iと頂点jの間の辺の数}\times (-1)&(\mathrm{otherwise}) \end{cases}
前回の記事(下のリンクを参照)では、コーディングインタビュー前日までに役立つ知識とインタビューの意義を考察した。 en9.hatenablog.com この記事では、コーディングインタビュー当日の思考過程について考えてみる。 コーディングインタビュー最中の思考 あなたがGoogleやFacebookといった、競争の激しいテック企業のコーディングインタビューを受ける状況を想像してほしい。 何ヶ月にも及ぶ練習を乗り越え、準備は万端だ。 だが、面接官が問題の設定を説明し始めると、自分の鼓動が速まっていくのを感じる。 なんてことだ、今までやったことない問題だ。 あれだけ解いたのに。 いったいどうアプローチすればよいのだろう? どのデータ構造を使えば解けるのかも分からない。 動的計画法のような気も、単なる分割統治法の気もする。 それともgreedyに解けるのか? どんな境界例が考えられるのか頭に思い
概要 ナップザック問題を分岐限定法で爆速($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$が
この記事は IQ1アドベントカレンダー2019 の 5日目の記事です。 adventar.org 今回はちょっとした小ネタ記事として、splay treeのvisualizationを簡易的に作った話を書きます。 はじめに Splay Treeとは? bottom-up top-down visualizationの実装 参考 はじめに 最近、Splay Treeがぬるぬる動く様子を眺めて癒やされたい(?)、という気持ちになり自作したくなったのでさくっと作りました。 作成期間はこのアドベントカレンダー記事を書こうとしてからの直近1週間です。 Splay Treeとは? スプレー木 - Wikipedia Splay tree - Wikipedia 平衝二分探索木の1つであり、参照したノードを回転しながらrootに持ってくるsplay操作によって平衝を保つ。 splay操作では zig,
結構頑張って作ってるのに授業用ウェブサイトに置いているだけではあまり読まれることもなさそうなので,授業で作った資料の中で公開することに多少の価値がありそうなものについては定期的にこちらで公開してみることにします. 授業に関するよりup-to-dateな情報や資料は私のteaching関係websiteをご覧ください. Advanced Microeconomics II の講義ノート(英語)(2019/12/04掲載) 西南財経大学の大学院向けのミクロ経済学の授業でゲーム理論を教えるにあたって作成した講義資料です(授業ではノートのメインな部分はほとんどカバーしていますが,いくつかの理論的なトピックはスキップしています).理論研究自体というよりも,実証・応用研究の研究者になることを目指す学生にどのように動機づけを与えるか,そして「理論の人たちの興味」がどのように応用に結びついているかをなんと
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? Proximity search:列挙アルゴリズムの新たな構築手法 本記事は「データ構造とアルゴリズム Advent Calendar 2019」3日目の記事です. 2 日目は @yurahunaさんによる「三角形分割の数え上げとランダムサンプリング」です. 4 日目は @ygussanyさんによる「群ラベル制約付き最短路問題」です. この記事の元ネタは,STOC 2019で発表されたProximity searchに関する論文です.証明等に関しては省略します.詳しく知りたい方は下記文献にあたってください.また,グラフアルゴリズムにおけ
データ構造とアルゴリズムに関する話題なら何でもOKです。 メジャーなものからマイナーなものまで様々なトピックを好きなように書きましょう! カレンダーの愛称は「デーアルアドカレ」でお願いします! 関連: 以下は「文字列アルゴリズム Advent Calendar」を含みますが、実態は何でもありで様々なデータ構造とアルゴリズムが紹介されています。 文字列アルゴリズム Advent Calendar 2016 - Qiita 文字列アルゴリズム Advent Calendar 2017 - Qiita データ構造とアルゴリズム Advent Calendar 2018 - Qiita データ構造とアルゴリズム #2 Advent Calendar 2018 - Qiita
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く