AOJ 0178 TETORIS
問題
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0178。
解法
シュミレーション問題です。 指示通りに処理すればできる高さは十分にとっておかないとRUNTIME ERROR吐かれる
コード
int t[UNDER+10][5], n; int count(){ int res = 0; rep(i, UNDER) rep(j, 5) if(t[i][j] == 1) res++; return res; } void deleteblock(){ for(int y = UNDER-1; y >= 0; y--){ int f = 0; rep(i, 5) if(t[y][i] == 0){ f = 1; break;} if(f) continue; rep(i, 5){ for(int c = y; c > 0; c--){ t[c][i] = t[c-1][i]; } } t[0][0] = t[0][1] = t[0][2] = t[0][3] = t[0][4] = 0; y++; } return; } int main(){ while(scanf("%d", &n) && n){ int d, p, q; memset(t, 0, sizeof(t)); rep(i, 5) t[UNDER][i] = 1; rep(i, n){ scanf("%d%d%d", &d, &p, &q); q--; if(d == 1){ REP(y, 1, UNDER+1){ int f = 0; REP(x, q, q+p) if(t[y][x] == 1) f = 1; if(!f) continue; REP(x, q, q+p) t[y-1][x] = 1; break; } }else{ rep(y, UNDER+1){ if(!t[y][q]) continue; for(int c = y-1; c > y-p-1; c--) t[c][q] = 1; break; } } deleteblock(); } printf("%d\n", count()); } return 0; }
コードが酷いフラグ使い過ぎて読みづらくなってます