解いた問題

5/18/2012

SRM496 Div1 Easy

250

貪欲



class ColoredStrokes {
public:
  int getLeast(vector <string> P)
  {
    int cnt = 0;

    const int h = P.size(), w = P[0].size();
    bool b[h][w];
    bool r[h][w];

    fill(&b[0][0], &b[h - 1][w], false);
    fill(&r[0][0], &r[h - 1][w], false);

    for (int i = 0; i < (int)P.size(); ++i) {
      for (int j = 0; j < (int)P[i].size(); ++j) {
        if (b[i][j]) continue;
        if (P[i][j] == 'B' || P[i][j] == 'G') ; else continue;
        ++cnt;
        for (int k = i; k < (int)h; ++k) {
          if (P[k][j] == 'B' || P[k][j] == 'G') ; else break;
          b[k][j] = true;         
        }
      }
    }
   
    for (int i = 0; i < (int)P.size(); ++i) {
      for (int j = 0; j < (int)P[i].size(); ++j) {
        if (r[i][j]) continue;
        if (P[i][j] == 'R' || P[i][j] == 'G') ; else continue;
        ++cnt;
        for (int k = j; k < (int)w; ++k) {
          if (P[i][k] == 'R' || P[i][k] == 'G') ; else break;
          r[i][k] = true;         
        }
      }
    }

    return cnt;
  }
};