はまやんはまやんはまやん

hamayanhamayan's blog

Grid Coloring [AtCoder Regular Contest 080 D]

http://arc080.contest.atcoder.jp/tasks/arc080_b

解説

http://arc080.contest.atcoder.jp/submissions/1485890

数を順番に配置していくことを考える。
この時、端から順にジグザグに配置していけば、題意を満たす配置になることが考えられる。
(ジグザグにすれば必ず前の配置と連続な配置となる)
後は、実装だが普通に配置して、出力時にy座標のパリティで入れ替えるようにした。

int H, W, N, A[101010];
int ans[1010][1010];
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> H >> W >> N;
    rep(i, 0, N) cin >> A[i];
 
    int cu = 0;
    rep(y, 0, H) rep(x, 0, W) {
        ans[y][x] = cu + 1;
        A[cu]--;
        if (!A[cu]) cu++;
    }
 
    rep(y, 0, H) {
        rep(_x, 0, W) {
            int x;
            if (y % 2 == 0) x = _x;
            else x = W - 1 - _x;
 
            if (_x) printf(" ");
            printf("%d", ans[y][x]);
        }
        printf("\n");
    }
}