A09 - Winter in ALGO Kingdom

atcoder.jp

配列のインデックスが配列に格納されているような形なんで、ミスしてもなかなか気付かずハマった。配列の中身を出力するコードを一時的に足して、間違っていた箇所にようやく気付けた。

var HWN = Console.ReadLine()!.Split(' ').Select(x => int.Parse(x)).ToList();
var (H, W, N) = (HWN[0], HWN[1], HWN[2]);
var (A, B, C, D) = (new int[N], new int[N], new int[N], new int[N]);
for (var i = 0; i < N; i++)
{
    var ABCD = Console.ReadLine()!.Split(' ').Select(x => int.Parse(x)).ToList();
    (A[i], B[i], C[i], D[i]) = (ABCD[0], ABCD[1], ABCD[2], ABCD[3]);
}

// N 日目の積雪をマッピング
var X = new int[H + 2, W + 2];
for (var i = 0; i < N; i++)
{
    X[A[i], B[i]]++;
    X[A[i], D[i] + 1]--;
    X[C[i] + 1, B[i]]--;
    X[C[i] + 1, D[i] + 1]++;
}

// 2次元累積和を計算
var Z = new int[H + 2, W + 2];
for (var h = 1; h <= H; h++)
{
    for (var w = 1; w <= W; w++)
    {
        Z[h, w] = Z[h, w - 1] + X[h, w];
    }
}
for (var w = 1; w <= W; w++)
{
    for (var h = 1; h <= H; h++)
    {
        Z[h, w] = Z[h - 1, w] + Z[h, w];
    }
}

// 答えを出力
for (var h = 1; h <= H; h++)
{
    for (var w = 1; w <= W; w++)
    {
        if (w > 1)
        {
            Console.Write(" ");
        }
        Console.Write(Z[h, w]);
    }
    Console.WriteLine();
}