読者です 読者をやめる 読者になる 読者になる

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;
}

コードが酷いフラグ使い過ぎて読みづらくなってます