[AtCoder] ABC 069 D – Grid Coloring
問題
方針
敷き詰めパズルのような問題ですが、実際はもっと簡単です。一番左上の行から右に向かって色 \( i \) を \( a_1 \) 個塗っていき、\( W \) 個塗ったあとは、下の行の右端から左に向かって塗っていきます。つまり、ジグザグに塗っていくことで問題を解くことができます。
コード
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { int H, W, N; cin >> H >> W >> N; int a[N]; for (int i = 0; i < N; i++) { cin >> a[i]; } int c[H][W]{}; int h = 0; int w = 0; for (int i = 0; i < N; i++) { for (int j = 0; j < a[i]; j++) { c[h][w] = i + 1; if (h % 2 == 0) { w++; if (w == W) { h++; w = W - 1; } } else { w--; if (w == -1) { h++; w = 0; } } } } for (int i = 0; i < H; i++) { for (int j = 0; j < W; j++) { if (j == W - 1) { cout << c[i][j] << "\n"; } else { cout << c[i][j] << " "; } } } return 0; }
ディスカッション
コメント一覧
まだ、コメントがありません