D – 大ジャンプ 解説 (AtCoder Beginner Contest 011)
問題へのリンク
問題概要座標 \((0,0)\) からスタートして \(N\) 回の移動で \((X,Y)\) に到達する確率を求めたい。
1回の移動では、上下左右それぞれの方向に確率 \(\frac{1}{4}\ ...
「写像12相」で典型的な数え上げ問題のパターン総整理
条件を満たすものが何通りあるか数える問題、すなわち数え上げ問題には様々なものがありますが、「\(n\) 個の玉を \(x\) 個の箱に分ける方法は何通りか」などといった、典型的なものはある程度パターン化して解くことができます。 ...
B – 123 Triangle 解説 (AtCoder Grand Contest 043)
問題へのリンク
問題概要1,2,3 で構成された整数列 \(a_1 a_2 a_3 \cdots a_N\) が与えられ、\(x_{i,j}\) を以下のように再帰的に定義する。
\(x_{1,j} := a_j\) ...パスカルの三角形による二項係数(nCk)の計算
以下のような「上の2つを足して下の数字をつくる三角形」をパスカルの三角形といい、上から \(n\) 行目・左から \(k\) 個目の数は、\(_{n}\mathrm{C}_{k}\) に対応しています。(0-indexed)
二項係数(nCk)の偶奇判定のアルゴリズム
Lucasの定理を利用することで、二項係数(nCk) が偶数なのか奇数なのかを効率よく判定することができます。
アルゴリズムLucasの定理をそのまま利用したアルゴリズム:
\({}_{n_i}\mathrm ...二項係数(nCk)を素数(p)で割った余りの計算(Lucas の定理)
Lucas の定理を利用すると、\(_{n}\mathrm{C}_{k}\)% \(p\) が \(O( p^2 \log_p n)\) で計算できます。素数 \(p\) が小さい場合は十分高速です。
Lucas の定理任 ...
[AtCoder] ABC156 E – Roaming (500点)
n 個の部屋に 1 ずつ人がいる。以下を k 回行ったとき、考えられる状態は何通りあるか \(10^9+7\) で割った余りで答えよ。
ある部屋 \(i\) にいた人が、\(i \neq j\) を満たす任意の部屋 \( ...[AtCoder] ABC154 F – Many Many Paths (600点)
問題へのリンク
問題概要2次元の平面上で、以下のように関数 f(r,c) を定義する。
f(r,c) := (0,0)から(r,c)までの経路の個数
この時、以下を計算せよ。ただし、\(10^9+7 ...
競プロでよく使う二項係数(nCk)を素数(p)で割った余りの計算と逆元のまとめ
競技プログラミングの問題などでは、二項係数を非常に大きい素数 P で割った余りを出力させる問題が出題されることがあります。 \(P = 1000000007 = 10^9 + 7\) の素数を使用することなどが多いです。
...