公式
F - シューティングゲーム / Gun Shooting 解説
by
F - シューティングゲーム / Gun Shooting 解説
by
KoD
マス \((r, c)\) を撃ったとき、マス \((r-1, c)\) がブロックマスならばそのマスは落下します。すなわち、マス \((r, c)\) と \((r-1, c)\) が入れ替わります。
落下は連鎖的に起こる可能性があるので、次はマス \((r-2, c)\) が落下するかどうか調べる必要があります。マス \((r-2, c)\) が落下するならば、次はマス \((r-3, c)\) を調べます。これを続けていくと、いつかは空マスに辿り着き、マス目の変化が終了します。
これは while 文を用いて実装すると簡潔です。
実装例 (C++) :
#include <bits/stdc++.h>
using namespace std;
int main() {
int h, w;
cin >> h >> w;
vector grid(h, vector(w, 0));
for (auto& v : grid) {
for (auto& x : v) {
cin >> x;
}
}
int n;
cin >> n;
while (n--) {
int r, c;
cin >> r >> c;
r -= 1, c -= 1;
grid[r][c] = 0;
while (r > 0 and grid[r - 1][c] > 0) {
swap(grid[r][c], grid[r - 1][c]);
r -= 1;
}
}
for (int i = 0; i < h; ++i) {
for (int j = 0; j < w; ++j) {
cout << grid[i][j] << " \n"[j + 1 == w];
}
}
return 0;
}
投稿日時:
最終更新:
