並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 40 件 / 57件

新着順 人気順

CompetitiveProgrammingの検索結果1 - 40 件 / 57件

  • 競技プログラミングで解法を思いつくための典型的な考え方 | アルゴリズムロジック

    競技プログラミングの問題を解くためには2つのステップがあります。 問題で要求されていることを言い換える知っているアルゴリズムやデータ構造を組み合わせて解く 必要な(知っておくべき)アルゴリズムやデータ構造は色々なところで学ぶことができます。 しかし、「問題の言い換え」や「アルゴリズムを思いつく」というのは、非常に様々なバリエーションがあり、問題をたくさん解かないとなかなか身につきません。 そこで、この記事は以下のことを言語化し、練習のための例題を提示することを目標とします。 問われていることを、計算しやすい同値なことに置き換える方法アルゴリズムを思いつくための考え方競技プログラミングで「典型的」と思われる考え方 ※一部問題のネタバレを含むので注意 ※良く用いられるアルゴリズムやデータ構造については競技プログラミングでの典型アルゴリズムとデータ構造 を参考にして下さい。 入力の大きさ(制約)

      競技プログラミングで解法を思いつくための典型的な考え方 | アルゴリズムロジック
    • できるだけ嘘を書かずに計算量やオーダーの説明をしようとした記事 - えびちゃんの日記

      計算量についてのお話です。対象は、プログラミング経験はあるが計算量のことを知らない初心者から、計算量のことを知っているつもりになっている中級者くらいです。 数式を見たくない人にとっては読むのが大変かもですが、深呼吸しつつ落ちついて読んでくれるとうれしいです。 それから、この記事が自分には合わないな〜と思ったときは、(別の記事を Qiita とかで検索するよりも)この記事の一番下の 参考文献 にある本を読むことをおすすめします。Amazon の試し読みで無料で読めます*1。 TL; DR 関数の増加度合いのことをオーダーと呼ぶよ 計算量は、入力サイズ(など)を受け取ってアルゴリズムの計算回数(など)を返す関数だよ その関数のオーダーについての議論がよく行われるよ オーダーを上から抑えるときは \(O\)、下から抑えるときは \(\Omega\) を使うよ オーダーを上下両方から抑えたいときは

        できるだけ嘘を書かずに計算量やオーダーの説明をしようとした記事 - えびちゃんの日記
      • アルゴリズムの世界地図 - Qiita

        0. アルゴリズムとは? まず、アルゴリズムとは何かを説明します。(0 節の説明はスライド「50 分で学ぶアルゴリズム」 の説明を参考にして書きました) さて、次の問題を考えてみましょう。 問題: 1 + 2 + 3 + … + 100 の値を計算してください。 単純な方法として、式の通りに 1 つずつ足していく方法が考えられます。すると、以下の図のように答えが計算されることになります。 これで答え 5050 が正しく求まりました。これはれっきとした アルゴリズム であり、この問題を 99 回の足し算 で解いています。しかし、計算回数が多く、計算に時間がかかるのではないかと思った方もいると思います。 ここで、方法を変えて、「1 + 100」「2 + 99」「3 + 98」…「50 + 51」の合計を求めることで、1 + 2 + 3 + … + 100 の値を計算してみましょう。 50 個の

          アルゴリズムの世界地図 - Qiita
        • 競技プログラミングの在り方 ~「競技プログラミングを我々が終わらせる」を受けて~ - chokudaiのブログ

          nuc.hatenadiary.org 競技プログラミングについての言及があったのですが、バズってる+競技プログラミングについて、納得がいかない記述がかなり多く見受けられたので、反論記事を書きました。 自己紹介 競技プログラミングの日本最大企業「AtCoder」の社長を9年間続けています。競技プログラマとして、2010年から毎年1つは世界大会で入賞しています。 完全に競技プログラミング支持側の意見なので、ポジショントークを出来るだけ排除しようと心がけているものの、完全に排除することは多分出来ていないため、多数の意見と比較してもらえると幸いです。 競技プログラミングとGoogle まずは肯定的な所から。 Googleに入るためには、競技プログラミングではなく、Googleに入るための勉強をするべき、という点に関しては、間違いなく正しいです。特にAtCoderの競技プログラミングは、常日頃から

            競技プログラミングの在り方 ~「競技プログラミングを我々が終わらせる」を受けて~ - chokudaiのブログ
          • 現役高校生が、AtCoderでレッドコーダーになるまでにやってきたこと。プログラミング上達の秘訣を全て教えます - Findy Engineer Lab

            こんにちは、はじめまして。筑波大学附属駒場高等学校 3 年生(今年 4 月から東京大学に入学予定)の米田優峻(@e869120)と申します。私は競技プログラミング(競プロ)が趣味で、AtCoder・情報オリンピック・パソコン甲子園などの大会に出場しています。2021 年 3 月時点で、AtCoder では赤色(レッドコーダー)です。また、国際情報オリンピックの 2018 年/2019 年/2020 年大会で金メダルを獲得しています。*1 とはいえ、決して簡単にこの記録を手に入れられたわけではありません。何度も挫折と失敗を経験しながら自分のスキルを磨いた結果、競プロを始めてから 3 年後にはレッドコーダーになることができたのです。 今回は「わたしの選択」というテーマで寄稿の機会を頂いたので、私が中学 1 年生の秋に競技プログラミングを始めてからレッドコーダーになるまで、そして国際情報オリンピ

              現役高校生が、AtCoderでレッドコーダーになるまでにやってきたこと。プログラミング上達の秘訣を全て教えます - Findy Engineer Lab
            • アルゴリズム・AtCoder のための数学【前編:数学的知識編①】 - Qiita

              こんにちは、大学 1 年生になったばかりの E869120 です。 私は競技プログラミングが趣味で、AtCoder や日本情報オリンピックなどに出場しています。ちなみに、2021 年 4 月 7 日現在、AtCoder では赤(レッドコーダー)です。 本記事では、アルゴリズムの学習や競技プログラミングで使える数学的な部分を総整理し、それらについて解説したいと思います。前編・中編では数学的知識、後編(2021/4/26 公開予定)では数学的考察の側面から書いていきます。 【シリーズ】 アルゴリズム・AtCoder のための数学【前編:数学的知識編①】 ← 本記事 アルゴリズム・AtCoder のための数学【中編:数学的知識編②】 アルゴリズム・AtCoder のための数学【後編:数学的考察編】 1. はじめに 21 世紀も中盤に入り、情報化社会(いわゆる「IT 化」)が急激に進行していく中、

                アルゴリズム・AtCoder のための数学【前編:数学的知識編①】 - Qiita
              • [2023年1月版]競技プログラミングを始めたばかりの人にオススメの問題集 - Qiita

                「競技プログラミングを始めたばかりの人にオススメの問題集は何?」というのが普段よく見ている Slack で話題に登っていたので、私の考えをまとめました。 おことわり 私は競技プログラミングを本格的に始めてからもうすぐ5年の水色コーダーです。めっちゃくちゃに強いわけではないですが、基礎的なところはある程度習得している、という感じです。 この記事は、そのような実力の私が、あくまでも独自の評価軸で勝手に評価したものなので異論はあると思います。また、各種学習法/問題集について私自身が全て完走しているわけではありません。 これらをご理解いただいたうえで、以下をご覧ください。 最推し: アルゴ式 2023年1月現在、初心者向けの最初の問題集としてお勧めしたいのは アルゴ式 です。アルゴ式の特徴として次のようなものがあると思っていて、それが初心者が練習するうえで適した特徴だと考えるからです ジャンルごと

                  [2023年1月版]競技プログラミングを始めたばかりの人にオススメの問題集 - Qiita
                • IT未経験からMLエンジニアになるまでの2年半でやったこと - MLaaSS - Machine Learning as a Self-Satisfaction

                  はじめに 自身の転職活動にあたり皆さんの転職エントリが非常に参考になったので、私も同じ境遇の方の参考になればと思い、書き残すことにしました。(ただ、本当に私と似た境遇の方にはなかなかリーチしづらい気がしていますが・・・) TLDR; 30歳でIT未経験からMLエンジニアに転職 約2年半独学で勉強(ほとんどkaggleしてただけ) 無関係に思えた現職での経験もなんだかんだ転職で役に立った 目次 自己紹介 現職について 転職の理由 勉強したこと 転職活動 終わりに 1.自己紹介 かまろという名前でTwitterなりkaggleなりをやっています。kaggleでは画像やNLPといったdeep learning系のコンペを中心に取り組んでおり、2019年の9月に金メダルを獲得しMasterになることができました。 恐らくここが他の転職エントリを書かれている方々と大きく異なる点かと思うのですが、現職

                    IT未経験からMLエンジニアになるまでの2年半でやったこと - MLaaSS - Machine Learning as a Self-Satisfaction
                  • この半年やったこと、継続していること - from scratch

                    syohex.hatenablog.com studio3104.hatenablog.com あまりにも同じことをしていたので「せっかくなので」と思って筆を執ることにする。 @syohex さん も @studio3104 さん も僕もだいたい同年代の人たちが同年代の sugyan や色々な方の影響を受けて同じことをしているというのはシンパシーを感じますね。 僕は今の仕事はフロントエンドエンジニアであることが多いのですが、「知識に垣根は作らない」をモットーにしているので、色々半年間挑戦してみました。 Leetcode この半年で545問解きました。 github.com sugyan が leetcode に取り組んでいたのも見てたのですが、僕の場合は自分の会社の面接でコード面接をやることがあり、コード面接の時に自分が知らないような事を問題として出すのは恥ずかしいな、という思いから勉強し

                      この半年やったこと、継続していること - from scratch
                    • RustCoder ―― AtCoder と Rust で始める競技プログラミング入門

                      AtCoder のジャッジシステムを利用しながらプログラミング言語 Rust について解説します.C++ や python のような他の言語に触れたことのないプログラミング初心者でも読めるよう努めています.更新履歴は github ( https://github.com/fiveseven-lambda/zenn/commits/main/books/rust-atcoder ) から見られます.内容に関するご意見やご指摘などは,プルリクエストか twitter ( https://twitter.com/57tggx ) で遠慮なくお願いします.カバー画像: GRAPHY 筧様

                        RustCoder ―― AtCoder と Rust で始める競技プログラミング入門
                      • 競技プログラミングに関係する数学の整理 ~文系出身や数学苦手erが、もっと競プロを楽しむために~ - テルの競プロメモ

                        まえがき この記事の目的 意図する対象読者 今回の整理の仕方(記事の見方) 注意 競プロに関係する数学(本題) 言葉(文系でも多分聞いたことはある)編 言葉(文系だと聞いたことないかも)編 言葉(離散数学)編 「式変形」編 「図形っぽいやつ」編 筆者のバックグラウンド 経歴、仕事など まえがき この記事では、競技プログラミングに関係する数学用語・概念と、それがどんな単元(分野)に属するものかを整理(一覧化)します。 競技プログラミングの問題に出てくる用語・概念をはじめ、競技プログラミングの解説記事などに出てくる用語・概念も、思いつく限り挙げています。 「この記事の数学的な部分、どのぐらい信用できるの?」とか、「数学苦手と言ってもどのくらい苦手なの?」といった疑問への参考としては、筆者のバックグラウンドを記事の最後で紹介したので、気になる方は先にそちらを読んでください。 この記事の目的 文系

                          競技プログラミングに関係する数学の整理 ~文系出身や数学苦手erが、もっと競プロを楽しむために~ - テルの競プロメモ
                        • 最短経路問題総特集!!!~BFSから拡張ダイクストラまで~ - Qiita

                          基本的アルゴリズム(幅優先探索など)から応用(経路復元、拡張ダイクストラなど)まで、最短経路問題に関するアルゴリズムを総特集しました。 基本的なグラフ理論の用語については、次を参考にしてください。 グラフ理論 用語集 queueなどのデータ構造の用語については、次のスライドの後半を参考にしてください。 C++ STL講習会 by @e869120 最短経路問題とは 一般的に、次のような問題とされます。 $V$ 頂点と $E$ 辺からなるグラフが与えられる。頂点 $u$ と 頂点 $v$ を結ぶパスのうち、重みの総和が最も小さいものはどれか。 始点を固定して他のすべての頂点との対について最短経路問題を解く場合や、任意の2頂点の対について解く場合などが実際には多いです。 実社会とも強く密着した問題のため、古くからたくさん効率的な解法が考えられてきました。 今回はそれらを紹介しつつ、細かいテクニ

                            最短経路問題総特集!!!~BFSから拡張ダイクストラまで~ - Qiita
                          • 「競技プログラミングの鉄則」のレビュー - じじいのプログラミング

                            米田 優峻さん(E869120@ICPC2022 (@e869120) / Twitter)の著書「競技プログラミングの鉄則 ~アルゴリズム力と思考力を高める77の技術~」をご恵贈いただきました。その感想です。 競技プログラミングの鉄則 (Compass Booksシリーズ) 作者:米田 優峻マイナビ出版Amazon 素晴らしい内容で競技プログラミング初心者への最初の1冊として最もお勧めできる本です。特に、数学も得意というわけではなくプログラミング自体も初めてという方には、ダントツで一番お勧めできる本です。 本書の良い点 1.図が分かりやすい。 最初の48ページが無料公開されているので、百聞は一見にしかずということで見ていただけると良いと思います。i www.dropbox.com 図自体分かりやすいですし全編カラーで書かれているのも良いです。段階的に説明すべきものについて無理に1枚に納め

                              「競技プログラミングの鉄則」のレビュー - じじいのプログラミング
                            • 【競プロ】新人SEがAtCoderを始めて水色になった【色変記事】 - Qiita

                              AtCoderで水色になりました。いわゆる色変記事です。 本記事では以下の4点について書きます。 競プロをしていて良かったこと・できるようになったこと 勉強したこと・改善案 レート推移や目標ラインの話 環境やマクロの紹介 最初に自己紹介すると、自分は情報系出身のSEで、現在は2年目です。 今年の頭に競プロをはじめ、先日水色になりました。 「プログラミング未経験から~」「50歳を超えて~」みたいな少数派ではないですし、「たったN回で達成!」「M年の苦闘の末に」みたいなドラマもありません。 普通に勉強しているエンジニアが競プロを半年間そこそこ頑張ったみたいな記事です。 バッググラウンドや参加回数については③で詳しく書きます。 なお、競技プログラミングについてザックリ知っている前提で書きます。 「競プロってなに?」「水色ってどのあたりなの?」という場合は が良くまとまっています。 ① 競プロをし

                                【競プロ】新人SEがAtCoderを始めて水色になった【色変記事】 - Qiita
                              • レッドコーダーが教える、競プロ・AtCoder上達のガイドライン【初級編:競プロを始めよう】 - Qiita

                                このように、競技プログラミングはコーディングの正確性が問われるコンテストです。 どんな問題が出されるか(2) 競プロは正確性だけではありません。例えば、以下の問題を考えてみてください。 $N$ 枚のカードが一列に並べられています。 左から $i$ 番目のカードには、整数 $A_i$ が書かれています。 あなたは $N$ 枚のカードの中から $2$ 枚同時に選び、取ることができます。取った $2$ 枚に書かれた整数の合計がちょうど $101$ となるような、カードの選び方の通り数を求めてください。 テストデータの制約:$1 \leq N \leq 10^{6}, 1 \leq A_i \leq 10^{9}$ 一番最初に考えられる解法は、以下のように「何枚目と何枚目を選ぶか全探索する」という方法だと思います。つまり、$1 \leq i < j \leq N$ を満たすすべての $(i, j)

                                  レッドコーダーが教える、競プロ・AtCoder上達のガイドライン【初級編:競プロを始めよう】 - Qiita
                                • AtCoder と Rust で始める!競技プログラミング入門(Rust 版 APG4b)

                                  競プロ( AtCoder 青 / CodeForces 青), C / C++ , Rust ,Arch Linux に関連する記事を書くと思います

                                    AtCoder と Rust で始める!競技プログラミング入門(Rust 版 APG4b)
                                  • 40代で Rust を触り始めて 1年で AtCoder に入水できた件 - Qiita

                                    はじめに hossie - AtCoder 2023/04/01 に AtCoder 入水しました (参加者の上位 10% ほどにあたる水色レートに到達)。参加から一年ほどでした。 本記事は色変に関する、まとまりのない長文ポエムです。 入緑の色変記事 AtCoder 緑になったのでパズル好きな人に競プロを紹介してみる - Qiita Rust 初心者の AtCoder 用開発環境設定と、解く流れの例 - Qiita Rust 初心者の AtCoder でよく使う言語機能とライブラリー覚え書き - Qiita スペック 開発環境 Microsoft Surface Laptop 2 + Windows 11 外付けディスプレイ、外付けキーボード、マウスは使っていません Visual Studio Code + Rust + cargo-compete 中の人 44歳、子育て世代 プログラミン

                                      40代で Rust を触り始めて 1年で AtCoder に入水できた件 - Qiita
                                    • AtCoderで青色(8割以上のIT企業でアルゴリズム力はカンスト)になったので青になるまでに必要そうなことをまとめる - Qiita

                                      はじめに 趣味と勉強を兼ねて競技プログラミングをしている @kami634 です。この度、AtCoderで目標としていた青コーダーになりました。 青色というのは、一定水準以上のアルゴリズムの知識を持ち、それを問題解決に活かすことができないとなることができません。それゆえに多くの人の目標になっていると思います。 chokudaiさんのブログ記事に青のレベル感が記載されていたのでご参考に↓ 黄・橙・赤などの上を見上げると、青色というのは通過点に過ぎず、まだまだ必要なことは多いです。ですが、青色レベルのアルゴリズム力があれば多くの問題を解決することが可能でしょう。 ということで、水色や青色あたりを目指す方のために、自分が必要だと思ったことをまとめたいと思います。 そもそもAtCoderとは AtCoderとは、競技プログラミングのコンテストを開催する日本最大のサイト(及びそれを運営する会社)です

                                        AtCoderで青色(8割以上のIT企業でアルゴリズム力はカンスト)になったので青になるまでに必要そうなことをまとめる - Qiita
                                      • 世界四連覇AIエンジニアがゼロから教えるゲーム木探索入門 - Qiita

                                        はじめに 書籍化 本記事を元に ゲームで学ぶ探索アルゴリズム実践入門~木探索とメタヒューリスティクス という書籍を出版することになりました! 本記事を読んで気になっていただけたらご購入をご検討いただけるとうれしいです! この記事で得られる技術 ゲームルールに適した探索アルゴリズムを選択する ゲーム木探索をするのに適したクラス設計 主要なゲーム木探索アルゴリズムの実装 この記事の特徴 汎用アルゴリズムの実装例による他ゲームへの応用力と、実際に動作可能なサンプルコードによる具体的実装イメージの両視点でわかりやすくした(片方しか記載のない記事が多い) サンプルコード付き日本語記事がほぼないDUCTを解説している サンプルコードは印のついたメソッドを実装したクラスさえ書けば、アルゴリズム部分を変更せずそのまま他のゲームで動作可能になっている この記事で扱わない関連技術 探索の高速化 多様性の確保

                                          世界四連覇AIエンジニアがゼロから教えるゲーム木探索入門 - Qiita
                                        • あのアルゴリズムはどこ? Pythonを使用してAtCoderの緑色や水色を目指す方に、30以上のアルゴリズムスニペットと100問以上の問題(ACコード付き)を紹介! - Qiita

                                          あのアルゴリズムはどこ? Pythonを使用してAtCoderの緑色や水色を目指す方に、30以上のアルゴリズムスニペットと100問以上の問題(ACコード付き)を紹介!PythonアルゴリズムAtCoder競技プログラミングPypy 0.はじめに 2020年の5月よりAtcoderのコンテストに参加してから一年経った、現在水色コーダーとなりました、H20と申します。 AtCoderではPythonを使用して参加しており、水色になるまでに様々なアルゴリズムを使用しました。 アルゴリズムについてはほとんど自作せず、有識者の作成されたスニペットを調べては、ある程度理解しながら使用していました。 この記事では、Pythonにてあるアルゴリズムを使用する際にお勧めな書き方の説明をしているスニペットの記事に、それを利用してACしたコードを添えて紹介していきたいと思います。 (ただ、私のACコードは極力見

                                            あのアルゴリズムはどこ? Pythonを使用してAtCoderの緑色や水色を目指す方に、30以上のアルゴリズムスニペットと100問以上の問題(ACコード付き)を紹介! - Qiita
                                          • 超高速!多倍長整数の計算手法【前編:大きな数の四則計算を圧倒的な速度で!】 - Qiita

                                            1. はじめに ~メインを読むための準備~ まず、大きな数の計算の話をする前に、少しコンピューターと計算回数について話しましょうか。 コンピューターは、現代ではソフトウェアやアプリケーションの開発に使われていますが、これには重要な背景があります。これは「計算がめっちゃ速いこと」です!人間なんかと比べたら、圧倒的な計算スピードを誇ります。 1-1. 人間の計算速度はどのくらい? まず人間はどのくらいの速度で計算できるでしょうか?速い人も遅い人もいると思います。 例えば、$628 \times 463$ の計算を、今やってみましょう。10 秒以内で計算できたらかなり速い方でしょう。この計算では、次のように「単純計算」を合計 28 回もしていることになります。 9 回の 1 桁 × 1 桁の掛け算 6 回の 1 桁 × 1 桁の足し算 13 回の繰り上がり計算 もし $628 × 463$ が

                                              超高速!多倍長整数の計算手法【前編:大きな数の四則計算を圧倒的な速度で!】 - Qiita
                                            • アルゴリズムロジック

                                              問題へのリンク 問題概要座標 \((0,0)\) からスタートして \(N\) 回の移動で \((X,Y)\) に到達する確率を求めたい。 1回の移動では、上下左右それぞれの方向に確率 \(\frac{1}{4}\ ...

                                                アルゴリズムロジック
                                              • 競プロerのための群論 (swapと順列と対称群) - little star's memory

                                                お知らせ Zennに移植しました。今後こちらの記事は更新されず、Zennの方のみ更新します。 zenn.dev この記事では競技プログラミングと群論に関する解説をします。競技プログラミングの問題を群論という立場から見ることで、新たな視点を得ることができるようになると思います。また、群論の入門にもなればいいなと思っています。 swapと順列 競技プログラミングの問題に、swapと順列は多く登場します。swapとは、2つの要素を入れ替える操作のことです。例えば、次のような問題があります。 第二回全国統一プログラミング王決定戦予選 C - Swaps (問題ページ) $ N $ 要素からなる2つの整数列 $ A_1,\ldots,A_N $ および $ B_1,\ldots,B_N $ が与えられます。以下の操作を $ N-2 $ 回まで(0回でもよい)行うことで、1以上 $ N $ 以下のすべ

                                                  競プロerのための群論 (swapと順列と対称群) - little star's memory
                                                • Kaggleの学習から投稿までをAWS, GitHub Actionsを使って自動化する - kanayamaのブログ

                                                  金山(@tkanayama_)です。先日終了したKaggleの"M5 Forecasting"というコンペに参加した際、クラウドやCI/CDの勉強も兼ねて、AWS, GitHub Actionsを使って遊んでみました。 免責 N番煎じだったらすみません。一応、同じことをやっているネット記事は見つかりませんでした。 私はクラウドなど勉強中の身分ですので、もっといいやり方がある or 説明が間違っている、などありましたら教えてください。 私がこのシステムを使って参加したコンペの順位は5,558チーム中1,000,000,000位だったので、Kaggleで勝てるかどうかは別問題のようです :pien: この記事のゴール 下記のようなシステムを構築することをゴールとします。 ユーザーがやることは2つ(図中でユーザーから伸びている黄色矢印)で、 実装したコードをgit pushし、 AWSコンソール

                                                    Kaggleの学習から投稿までをAWS, GitHub Actionsを使って自動化する - kanayamaのブログ
                                                  • パズルとアルゴリズムのコラボ本を書きました! - けんちょんの競プロ精進記録

                                                    1. はじめに お久しぶりです! けんちょん本のけんちょんです。 最近はアルゴリズムがとても盛り上がっていますね。今回新たなアルゴリズム本を上梓させていただくことになりました! 発売予定日は 2022/4/20 です。一部大型書店では、もうすでに並んでいるはずです。今回の記事では、この本を通してお届けしたいメッセージや、想定読者、内容などについて簡単に紹介させていただきます。 amazon ページへのリンク 2. 本書の内容と対象読者 2-1. 本書の内容 百聞は一見に如かずということで、まずは目次構成をお見せします! 第 1 章:アルゴリズム入門 第 1 話:「テンパズル」 〜 力まかせ探索 第 2 話:「小町算」 〜 再帰関数 第 3 話:「虫食算」 〜 枝刈り 第 II 章:グラフアルゴリズム 第 4 話:「数独」 〜 深さ優先探索 1 第 5 話:「覆面算」 〜 深さ優先探索 2

                                                      パズルとアルゴリズムのコラボ本を書きました! - けんちょんの競プロ精進記録
                                                    • よくやる再帰関数の書き方 〜 n 重 for 文を機械的に 〜 - けんちょんの競プロ精進記録

                                                      時は 2020 年 5 月 3 日。 ここ最近、AtCoder では、「再帰関数を用いた DFS な全探索」というタイプの問題が激増しています!!! AtCoder ABC 165 C - Many Requirements (昨日のやつ) AtCoder ABC 114 C - 755 AtCoder ABC 119 C - Synthetic Kadomatsu AtCoder ABC 161 D - Lunlun Number パナソニックプログラミングコンテスト D - String Equivalence これらの多くは緑後半から水色前半の difficulty を叩き出す、とても恐れられている問題たちです。しかし実のところ、「ちょっと複雑だけど、単純に全探索するだけ」という側面もあります。 これらの出題が最近急増しているのは、おそらくは AtCoder 社側に 最近の AtCo

                                                        よくやる再帰関数の書き方 〜 n 重 for 文を機械的に 〜 - けんちょんの競プロ精進記録
                                                      • 競プロのアルゴリズム関連略称まとめ - noshi91のメモ

                                                        随時募集しています 略称 正称 APSP All Pairs Shortest Path BB Branch and bound BBST Balanced Binary Search Tree BFS Breadth First Search BIT Binary Indexed Tree BM Berlekamp-Massey BM Boyer-Moore BSGS Baby-Step Giant-Step CHT Convex Hull Trick CRT Chinese Remainder Theorem D&C Divide and Conquer DAG Directed Acyclic Graph DEPQ Double-ended priority queue DFS Depth First Search DP Dynamic Programming DST Disjoin

                                                          競プロのアルゴリズム関連略称まとめ - noshi91のメモ
                                                        • 競プロのための標準 C++

                                                          ◆ 内容 競技プログラミングで使える C++ の主要な標準機能のサンプル付き解説を執筆しています。C++ のバージョンは AtCoder の gcc 12.2 に準拠した C++17 / 20 / 23 です。競技プログラミング固有のハックやスタイル(<bits/stdc++.h>, 大きな配列、using namespace std 等)の使用を避けているため、一般的な C++ ソフトウェア開発でも使える、また C++ 標準ライブラリの機能 (std:: から始まる) を意識したコーディングの練習ができます。 ◆ 対象読者 ・競プロ上達のために C++ 標準ライブラリを一通り学びたい方 ・コンテストで参照できる C++ ドキュメントを探している方 ・現時点ではとくに APG4b や市販入門書で C++ を学んだ人にとって有益な内容から書き始めています。将来的にはさらに幅広い内容を扱う計画

                                                            競プロのための標準 C++
                                                          • 競プロ実装テクニック - よすぽの日記

                                                            これはなに 実装力で戦える! ~競プロにおける実装テクニック14選~ - Qiita に触発された 競技プログラミングでコーディングの際気を付けていること - うさぎ小屋 を強く参考にしている 効果が高い or 一般性がありそう なことから書いたつもり 重要なこと 「競プロのきれいなコードと業務のきれいなコードは違う」と定期的に唱える。未来の自分 or 他の人 が読む必要がないことを仮定できるため、様々なバッドノウハウ(業務)が正当化される。(あえて過激なことを書くと、)「using namespace stdを使わない」などは逆にバッドノウハウ(競プロ)だと思っている。 -fsanitize=undefined,address / -D_GLIBCXX_DEBUG #include <iostream> using namespace std; int main() { int a[10

                                                              競プロ実装テクニック - よすぽの日記
                                                            • セグメント木を徹底解説!0から遅延評価やモノイドまで | アルゴリズムロジック

                                                              セグメント木とは セグメント木とは、完全二分木(全ての葉の深さが等しい木)によって実装された、区間を扱うのに適したデータ構造のことです。 区間に対する操作を対数時間 O(log n) で行えることが特徴で、競技プログラミングなどで頻出となっています。 セグメント木でできること セグメント木は、区間に対する操作やクエリを行うことができます。 特に、 区間上の値を更新する任意の区間上の最小値や合計値などを取得する などが対数時間でそれぞれ行えるのが強みです。 区間上の合計値などは、累積和などを使えば前処理 O(N) ・クエリ O(1) で取得することもできます。しかし、区間上の値の更新と、合計値の取得が入り乱れるような時は、セグメント木の方が有効になることが多いです。 以下では説明のために、区間上の最小値 Range Minimam Query(RMQ) を扱うセグメント木を例として説明します

                                                                セグメント木を徹底解説!0から遅延評価やモノイドまで | アルゴリズムロジック
                                                              • 計算量について、償却/期待/平均など - noshi91のメモ

                                                                本記事は皆様からのご指摘を募集しております 誤った記述があるかもしれません 概要 競技プログラミングをやっていると などの表記を見掛けることも多いでしょう *1。 それぞれについて、大雑把な意味をまとめました。 アルゴリズムの挙動の正確な把握は競技においても重要です。 以降、全て時間計算量に付いて議論します。 注: 本稿内で用いられる はほとんどが に置き換えられますが、 Big O notation と同時に説明すると混乱を招くと判断し、競技プログラミングにおいて常用されている を使用しています。 最良計算量 多くのアルゴリズムは、入力によって計算量が変化します *2。 例えば、ソートアルゴリズムには大まかに 通りの入力が存在します。 あり得る全ての入力のうちの計算量の最小値を最良計算量と呼び、 を付けて表記します。 線形探索は (最初に求める値が存在した場合) マージソートは 挿入ソー

                                                                • 精進について - kyopro_friends’ diary

                                                                  サーバルだよ! 競プロの精進について書くよ。 精進の仕方や、精進に対する考え方はいろいろあるから、あくまで私の意見だと思って読んでね。 ■3行でまとめて ・復習が大事。解けた問題も解けなかった問題も、解説やいろんな子の実装を見てみる ・典型を身につけるのは大事。ABCは解説ACでもいいので解く ・写経はできればしない。一回自分で書いてみてから他の子の実装をパクる ■モチベーションについて レートがついて他の子と競う以上、やっぱりレートが下がると面白くないよね……。 私も最近は下がってこそないけど全然上がらなくて面白くないよ……。 モチベーションが低いときに無理してコンテストに出ても成績は悪くなりがちだから、そういう気分のときはしばらくコンテストに出ないというのももちろんありだよ。 だけど、私には「コンテストに出て悔しい思いをして、解けなかった問題をちゃんと復習する」って方が合ってるから、で

                                                                    精進について - kyopro_friends’ diary
                                                                  • 競技プログラミングで頻出の「ダブリング」を解説する

                                                                    競技プログラミングでは頻繁に出てくる「ダブリング」という手法について説明しようと思います。 競プロをはじめて間もない人や、競プロ外の人に向けて書きたいと思います。 最初に予防線を張っておきますが、内容が正しいかどうかは保証しません。 繰り返し二乗法繰り返し二乗法という有名なアルゴリズムがあります。 例えば、3の100億(10^10)乗を計算せよと言われた時に、 1回1回計算していたのでは時間がいくらあっても足りません。 しかし繰り返し二乗法を使えば、log(100億)くらいの計算量で計算出来るようになります。 具体的にどういう仕組みかを説明するために より小さな場合として3の11乗を計算するとした時に、 3^11 = (3^8) x (3^2) x (3^1) と3^(2^k)の積に分解出来るならば、 11を1011と2進数で表した時の1の数分だけで計算が終わることになります。 (a^bは

                                                                      競技プログラミングで頻出の「ダブリング」を解説する
                                                                    • 超高速!多倍長整数の計算手法【後編:N! の計算から円周率 100 万桁の挑戦まで】 - Qiita

                                                                      4-1. N! の高速な計算 $N! = 1 \times 2 \times 3 \times 4 \times \cdots \times N$ を計算してみましょう。 $N!$ は場合の数を求める問題でよく出てきて、こんな感じのものが求まります。 $1, 2, ..., N$ が書かれたトランプのカードが 1 枚ずつあるとき、これを一列に並べる順番は何通りあるか? 例えば、$N = 13$ の場合 $13! = 6,227,020,800$ 通り、のように計算できます。 また、$N!$ は二項係数 $_NC_K$ を求めるのにも使われます。 $N!$ が求まれば、$_NC_K = N! \div K! \div (N-K)!$ で掛け算・割り算するだけで計算できますね。 $N$ 個の区別できるボールから $K$ 個を選ぶ方法は何通りか? これが $_NC_K$ になります。例えば、$N

                                                                        超高速!多倍長整数の計算手法【後編:N! の計算から円周率 100 万桁の挑戦まで】 - Qiita
                                                                      • [数学・numpy] 高速フーリエ変換(FFT)による畳み込み | maspyのHP

                                                                        概要 「Python で競技プログラミングをやる」の文脈で、高速フーリエ変換を使うための基礎知識を整理します。 高速フーリエ変換自体は競技プログラミング以外の文脈でも重要なアルゴリズムですが、そうした需要に応えることは、本記事では想定していません。 高速フーリエ変換の詳しいアルゴリズムにはこの記事では触れません(既存の解説が多数ありますし)。代わりにフーリエ変換についての基礎知識について、少し整理しました。ここは、使用言語に関係しない部分です。 最低限、Python での実装だけ見たい人は大部分を飛ばしてよいと思います。 フーリエ変換の性質 フーリエ変換の定義 詳しくは、本記事では扱いません。 $K$ を $1$ の $n$ 乗根を $n$ 個持つ体とします(競プロの文脈だと、$K=\C$ および $K=\F_p$ が重要です)。 $K$ に値を持つ数列 $A = (a_0,a_1,\ld

                                                                          [数学・numpy] 高速フーリエ変換(FFT)による畳み込み | maspyのHP
                                                                        • 競プロのための高速フーリエ変換

                                                                          ■「フーリエ変換って知ってる?」 ●「フーリエ変換ですか? 信号処理でもするんですか、先輩」 ■「いや、競プロで使えるようになりたいなって」 ●「ああ、畳み込みの高速化ですか。あれは高速フーリエ変換をそのまま使うだけですからね」 ■「勉強しようと思って色々調べたんだけど、なかなか理解できなくて」 ●「私もうまく説明できるかわかりませんが、お話しましょうか」 離散フーリエ変換(DFT) フーリエ変換の仲間たち ●「フーリエ変換の仲間には色々種類があるんですけど、競プロで使うのは離散フーリエ変換(DFT: Discrete Fourier Transform)ですね」 ■「離散ってことは、連続もあるんだよね」 ●「はい。ざっくり 4 種類あります。フーリエ変換では元の信号を別の信号に変換するんですが、元の信号が周期信号だと変換後は離散信号(数列)になります」 ■「周期信号っていうのは、決まった

                                                                            競プロのための高速フーリエ変換
                                                                          • 焼き鳥屋で刑法学者と意気投合してコインハイブ事件について書き出すだけの難儀なお仕事 - 白のカピバラの逆極限 S.144-3

                                                                            JavaScript で仮想通貨を採掘するコインハイブというライブラリがありました。 コインハイブ事件というのは、この仮想通貨をマイニングするプログラムコードを自身の管理するウェブサイトに設置したところ、不正指令電磁的記録保管罪(刑法168条の3)に問われたというものです。 このコインハイブ事件に関して、「アプリ開発の実務を踏まえた不正指令電磁的記録に関する罪の一考察 -コインハイブ事件を契機としてー」というタイトルで千葉大学の紀要に書き、千葉大学のページ上で PDFでも公開されました。 https://opac.ll.chiba-u.jp/da/curator/900119535/S09127208-36-1-P056.PDF https://opac.ll.chiba-u.jp/da/curator/900119535/ 内容に入る前に、まずは、この事件に関わっている、被告人、弁護士、

                                                                              焼き鳥屋で刑法学者と意気投合してコインハイブ事件について書き出すだけの難儀なお仕事 - 白のカピバラの逆極限 S.144-3
                                                                            • Grundy数(Nim数, Nimber)の理論

                                                                              ■「競プロでのゲーム問題って得意?」 ●「ゲーム問題ですか。ものによりますけど、Grundy 数で解ける問題は得意ですね。先輩は得意ですか?」 ■「その Grundy 数がよくわからないんだよね。最後から逆にたどると解ける問題とかは分かるんだけど、Grundy 数の何が嬉しいのかよくわからない」 ●「じゃあ今日はGrundy数のお話をしましょうか」 Grundy数を扱えるゲーム ●「Grundy 数は、ゲームの局面に非負整数を割り当てて必勝法や勝敗判定を行うというものです」 ■「ゲームなら何でも Grundy 数が使えるの?」 ●「そういうわけではないんですが、競プロで出てくるゲームなら使えるものは多いですね」 ■「何か必要条件があるってこと?」 ●「はい。公平ゲーム(不偏ゲーム)と呼ばれるゲームである必要があります。それにはこんな条件が必要です」 2人のプレーヤーは、terminal p

                                                                                Grundy数(Nim数, Nimber)の理論
                                                                              • Rust で競技プログラミングの作問支援ツールを作った話 - Qiita

                                                                                $ cd problem-directory/ $ ls -l total 8 -rw-r--r-- 1 koba_mac xxx 315 11 26 01:38 creo.toml drwxr-xr-x 2 koba_mac xxx 64 11 26 01:38 etc drwxr-xr-x 2 koba_mac xxx 64 11 26 01:38 in drwxr-xr-x 2 koba_mac xxx 64 11 26 01:38 out drwxr-xr-x 2 koba_mac xxx 64 11 26 01:38 sol drwxr-xr-x 2 koba_mac xxx 64 11 26 01:38 task creo.toml が唯一の設定ファイルです。リポジトリの sample_aplusb を参考に、creo.toml に然るべき行を追加したり、然るべきディレクトリに

                                                                                  Rust で競技プログラミングの作問支援ツールを作った話 - Qiita
                                                                                • 桁DPの痒いところに手が届く解説 - Qiita

                                                                                  はじめに 本記事は、アルゴリズムの一つである桁DPについて、入門者が疑問に感じる(というか筆者が実際疑問に感じた)ポイントに重点を置いて解説するものです。 筆者自身そこまで桁DPに詳しいわけではなく、むしろ最近覚えたぐらいなので、何かまずい部分があれば優しくご指摘いただけると嬉しいです。 この記事で特に重点を置くポイントは、次の通りです。 何故これでうまくいくのか 桁DPで数えているものは何か 初期条件はなぜこうなるのか 桁DPそのものの入門的解説としては、他にもけんちょんさん達の優れた記事がありますので、そちらも合わせてご覧ください。 http://torus711.hatenablog.com/entry/20150423/1429794075 http://drken1215.hatenablog.com/entry/2019/02/04/013700 https://pekempe

                                                                                    桁DPの痒いところに手が届く解説 - Qiita