行方向および列方向にソートされた行列内のゼロを数える
行列の各行と列が昇順にソートされている n x n バイナリ行列 (行列の要素は 1 または 0 のいずれか) が与えられ、その中に存在する 0 の数をカウントします。
行列の各行と列が昇順にソートされている n x n バイナリ行列 (行列の要素は 1 または 0 のいずれか) が与えられ、その中に存在する 0 の数をカウントします。
「O」、「G」、および「W」で満たされたマトリックスを考えると、「O」はオープン スペースを表し、「G」はガードを表し、「W」はバンクの壁を表します。マトリックス内のすべての O を、壁を通り抜けることができず、ガードからの最短距離に置き換えます。また、出力行列のガードを 0 に、壁を -1 に置き換えます。
コンピューターの黎明期以来、ハリウッドはハッカーやプログラマーを、コンピューターに座ってコンピューター上でランダムなキーを入力し、最終的にシミュレーションのような落下行列にコンパイルされる人物として大々的にデモンストレーションしてきました。ここでは、C++ を使用して、同様の落下行列シミュレーションをコンソール上に実装してみます。
サイズ M x N の行列が与えられると、部分行列の合計を見つけるために多数のクエリが必要になります。クエリへの入力は、合計を求める部分行列の左上と右下のインデックスです。
バイナリ行列、つまり 0 と 1 のみが含まれる場合、行列のすべての 0 の範囲の合計を見つける必要があります。ここで、特定の 0 の範囲は、0 の周りの左、右、上、下の方向の 1 の合計数として定義されます。それらは、ある方向の角点までのどこにでも配置できます。
2N x 2N の整数行列が与えられたとします。任意の行または列を、何度でも、任意の順序で反転することができます。タスクは、左上の N X N 部分行列の最大合計、つまり (0, 0) から (N - 1, N - 1) までの部分行列の要素の合計を計算することです。
2 つの行列 A と B が与えられます。タスクは行列 A と行列 B を再帰的に乗算することです。行列 A と行列 B に乗算互換性がない場合は、出力「不可能」を生成します。
サイズが m*n の行列が与えられた場合、タスクは、厳密に昇順または厳密に降順のいずれかでソートされた行列内のすべての行をカウントすることです。