Untitled
unknown
plain_text
a year ago
1.8 kB
6
Indexable
#include <iostream> #include <fstream> using namespace std; int N, K, board[100][10], region[100][10], regsizes[1001]; void gravity(void) { for (int j=0; j<10; j++) { int top = N-1, bottom = N-1; while (top >= 0) { while (top >= 0 && board[top][j] == 0) top--; if (top >= 0) board[bottom--][j] = board[top--][j]; } while (bottom >= 0) board[bottom--][j] = 0; } } void visit(int i, int j, int r, int c) { if (i<0 || i>=N || j<0 || j>9 || board[i][j]!=c || region[i][j]!=0) return; region[i][j] = r; regsizes[r]++; visit(i-1,j,r,c); visit(i+1,j,r,c); visit(i,j-1,r,c); visit(i,j+1,r,c); } bool iterate(void) { int r = 1; for (int i=0; i<N; i++) for (int j=0; j<10; j++) region[i][j] = 0; for (int i=0; i<N; i++) for (int j=0; j<10; j++) if (board[i][j] && !region[i][j]) visit(i,j,r++,board[i][j]); bool progress = false; for (int i=0; i<N; i++) for (int j=0; j<10; j++) if (board[i][j] && regsizes[region[i][j]]>=K) { board[i][j] = 0; progress = true; } gravity(); while (r) regsizes[r--] = 0; return progress; } int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> N >> K; string s; for (int i=0; i<N; i++) { cin >> s; for (int j=0; j<10; j++) board[i][j] = s[j]-'0'; } while (iterate()); for (int i=0; i<N; i++) { for (int j=0; j<10; j++) cout << board[i][j]; cout << "\n"; } return 0; }
Editor is loading...
Leave a Comment