1日9時間寝たい

本当は10時間寝たいです

AtCoder Beginner Contest 215 D 問題 Coprime 2 の解説

はじめに この記事では AtCoder Beginner Contest 215 D 問題 Coprime 2 を解く、計算量が悪いが AC する解法について書きます。 計算量の良い解法については公式解説を参照してください。 問題 長さ $N$ の正整数列 $A = (A_1, A_2, \ldots, A_N)$ が与えら…

Rustで実装! 作って学ぶRDBMSのしくみ を読んだ感想とメモ

はじめに WEB+DB PRESS Vol.122 の特集『Rustで実装! 作って学ぶRDBMSのしくみ』を読みました。 この特集は、出版社のサイトにも説明があるように、(実際の RDBMS に比べて) わずかな機能のみをサポートする小さな RDBMS を作りあげることで RDBMS の仕組み…

Writing A Compiler In Go を読んだ感想

はじめに Chapter 1: Compilers & Virtual Machines Chapter 2: Hello Bytecode! Chapter 3: Compiling Expressions Chapter 4: Conditionals Chapter 5: Keeping Track of Names Chapter 6: String, Array and Hash Chapter 7: Functions Chapter 8: Built-…

LCA (Lowest Common Ancestor; 最近共通祖先) がバグっていた

はじめに 親の親の親の…… 木の入力形式によってはバグに気づけない はじめに ダブリングで LCA を求めるスニペットがバグっていました。Library Checker で AC したので大丈夫かと思っていたのです。 バグに気づけなかった理由は木の入力形式だとわかりまし…

FParsec の使い方メモ

はじめに FParsec 結果 数値の parse 空白の parse 文字列の parse 足し算の parse 足し算の parse (複数回) 実行手順 はじめに この問題 を FParsec で解いたので使い方をメモ。 問題概要としては 1 plus 2 plus 3 plus 4 のような入力から 10 を得たい、と…

【競技プログラミング】Rust でグリッドグラフの走査

まえがき 隣接マスを走査するライブラリ まえがき 競技プログラミングで、グリッドグラフが与えられて、隣接 4 マスに移動できる設定はよくあります。 そのときは以下のようなプログラムを書くことになると思います。くわしくはこの問題 https://atcoder.jp/…

ABC 141 D - Powerful Discount Tickets 解説

問題: D - Powerful Discount Tickets 問題概要 解法 証明 ($\star$) の証明 類題 問題概要 $N$ 個の商品の値段 $A_1, A_2, \dots, A_N$ と割引券の枚数 $ M $ が与えられる。$a$ 円の商品に $b$ 枚割引券を使うと $\lfloor a / 2^b \rfloor$ 円で買える。$N…

「2 色で塗り分けられる」⇔「奇数長の閉路がない」の証明

グラフの話です。 簡単のために、グラフは連結で、多重辺や自己ループがないものとします。 用語の説明 2 色で塗り分けられるとは、次の条件を満たすようにグラフの頂点を 2 色で塗る方法が存在することをいいます。 条件:u と v が辺でつながっている ⇒ u …

Slash Command に対して 3 秒以上かかる処理をする

はじめに 結論 Cloud Functions Cloud Functions + Cloud Pub/Sub はじめに Slash Command は Slack の機能のひとつです。デフォルトでは /remind や /invite などがあります。 このようなスラッシュ / から始まるコマンドは自作することもできます。たとえ…

石の個数が同じになってはいけないニム (山が 2 つの場合), そのグランディ数

石の個数が同じになってはいけないニムはマヤゲームと呼ばれます。(参考: 『石取りゲームの数学~ゲームと代数の不思議な関係~』) 正確には、マヤゲームとは 通常のニムで指せる手のうち、ある $2$ 山の石が同じ個数になる手はダメ それ以外は OK 指せる手…

ニム和とニム積の分配法則の証明

ニム和とニム積に関して分配法則が成り立ちます。 『石取りゲームの数学~ゲームと代数の不思議な関係~』(佐藤文広) にある証明とまったく同じです。それを補足しながら説明します。 非負整数全体 ($0$ 以上の整数全体) を $\mathbb{N}_0$ と書きます。 定…

CodeChef March Challenge 2019 - Cheating on Queue

CodeChef March Challenge 2019 - Cheating on Queue の解説です。列に割り込みで入ってもおこられない最前の位置を求める問題です。Time Limit がきびしいです。

NimK (index-K Nim) の必勝判定・必勝側の具体的な手の選択

NimKの必勝判定・必勝側の具体的な手の選択について書きます。 後者は前者の証明に出てくるのですが念のために?指す手を求めるプログラムを書きました。

木の中心が直径上に存在すること・中心を見つけるアルゴリズム

木の中心が直径上に存在すること 中心を見つけるアルゴリズム について書きます。 木の中心とは「各頂点への距離の最大値」が最小になる頂点 (の集合) です。 頂点 $v$ から各頂点への距離の最大値を $ E(v) $ と書きます。つまり、 $$ E(v) = \max_u\{\math…

KMP法

テキスト文字列 txt にパターン文字列 pat が現れる位置を求めます。 たとえば txt = "abaaaba", pat = "aab" のとき、テキストの $4$ 文字目からパターンが現れます。 abaaaba aab 素朴な方法として、パターンの開始位置を全通り試すというものがあります。…

ラジオNIKKEI第2で流れている曲を教えてくれるAlexaスキルを作った

ラジオNIKKEI第2では平日の08:00-23:00にずっと音楽が流れています。 www.radionikkei.jp OA曲は ここ から見れます。 radikoを起動して選曲をするまでは声だけでできるけど、曲名を知りたいときにスマホを使わないといけないのはつらかったのでスキルを作り…

DDCC2019本戦に参加した感想

まとめ A, Bの2完 アナウンスの人の声が良い ケーキが美味しい はじめに 予選で272位 & 20卒だったので本戦に行きました。20卒枠は交通費も出るのでうれしいです。 起床 成功です。 DDCC始発部の朝は早い。— ikd (@ia7ck) 2019年1月18日 到着 受付 受付は ア…

テトリスのAIを作った

パソコンを使ったのでたぶんAIです。 youtu.be github.com AI ver.1 ランダム ver.2 評価関数 ver.3 GA 思い出 AI ver.1 ランダム ピースをランダムに回転させてランダムな位置に落とします。すぐにゲームオーバーになります。 ver.2 評価関数 各ターンでピ…

カーソル行の直前・直後に空行を挿入する micro の plugin を作った

micro editor で Insert Line Above/Below するプラグインを作りました。 VSCode で Ctrl+Enter とか Ctrl+Shift+Enter とかに割り当てられている *1 あれです。 レポジトリ Demo コード インストール 使い方 キーボードショートカット メモ マクロじゃダメ…

ABC108/ARC102 D All Your Paths are Different Lengths

ABC108/ARC102 D 公式解説の英語版の方法 $L=L'$のグラフから$L=L'+1, 2L'$のグラフを作るには $L=L'+1$ 先頭から末尾の頂点へ長さ$L'$の辺を引く $L=2L'$ すでに引いてある辺の長さを全て2倍にして、末尾の頂点から新しい頂点へ長さ$0$と長さ$1$の辺を引く

Implementation and Visualization Binary Heap

二分ヒープを実装しました。 機能 操作 最悪計算量 最大(最小)値の取得 $O(1)$ 要素の挿入 $O(\log_2 n)$ 最大(最小)値を持つ要素の削除 $O(\log_2 n)$ $n$はヒープの要素数です。 実装 up-heapは簡単だけど、down-heapは子が2つある場合優先度の高いほ…

数独をプログラムで解く

数独(SUDOKU)をプログラム (Ruby) で解きます。 アルゴリズム マスを前から見ていって、空欄のマスに1, 2, ..., 9の順で置けるかどうか試します。 置けるならその数字を置いて次のマスを見る どの数字も置けないなら、いままでの数字の置き方がまずかったと…

数式が入力できるチャット matcha を作った

はじめに 数式が入力できるチャットを作りました → matcha 想定している活用法は (La)TeXの練習として 数式を含むかんたんな議論の場として などです。 Demo 数式入力 機能 数式のライブプレビュー 入力した内容がすぐに数式に変換されるため、文法エラーな…

ガルパの呼称を検索・登録できるサービス gbp-call を作った

はじめに バンドリ! ガールズバンドパーティ! いいですよね。 キャラクターの間での呼称が気になったときどうしましょうか。ペアをバンドに含ませてライブをしてかけあいのセリフが出るのを待つ・図鑑でタップ連打・ストーリーを読み直す などがありますが…

ICPC 2018 国内予選 参加記

はじめに ACM-ICPC 2018 Asia Yokohama Regionalにチーム super_ikd で参加しました。結果はABCの3完103位でした。 チーム チーム名:super_ikd メンバー niyarin さん 研究が忙しそう! srup さん 問題の解法検索したらブログがよくヒットする! ikd (自分…

yukicon-historyを作った

はじめに Demo 説明 機能 構成 サーバサイド フロントエンド インフラ おわりに はじめに yukicoderでは隔週くらいで金曜にコンテストが開かれています。 毎回のコンテストでの自分の成績が一覧できると便利です。 yukicon-historyを使うと、各コンテストで…

平方分割の可視化

https://ia7ck.github.io/visualization/sqrt-decomposition/ Square Root Decomposition のアニメーション 平方分割について:セグメント木をあきらめた人のための平方分割 - くじらにっき++ 上のアニメーションはこの記事のRUQ (Range Update Query) ;色…

難易度7

難易度7を埋めました。→ AOJ/AtCoder-JOI 埋めたといいつつ、100%ではないです。(1つは提出してもIEになるので) 感想など → https://comprolog.netlify.com/categories/joi/

HTTF 2018 qual

問題 HACK TO THE FUTURE 2018予選 - AtCoder 本番の解答 9891030405点 Submission #2104678 - HACK TO THE FUTURE 2018予選 本番の後、この記事(競プロ解法紹介~レベル別マラソンの戦い方~)を参考にして解き直したら9990441025点になりました*1 左:989…

格子点とGCD

問題 格子点2点を結ぶ線分上にある格子点は(端点を含めて)いくつありますか 答え $gcd(|x_1-x_2|, |y_1-y_2|)+1$ 個です 原点(0, 0)と(a, b)を結ぶ線分を考えていいでしょう(a≧0, b≧0, a,bは整数) もとの問題はむずかしすぎるので、解ける問題を解きます…