解いた問題

6/29/2012

SRM544 Div1 Medium

500

各行の最も右の 1 のところを移動する。



class FlipGame {
public:
  int minOperations(vector <string> B)
  {
    const int H = B.size();
    const int W = B[0].size();

    int cnt = 0;
    while (true) {

      int mx = -1;
      for (int i = 0; i < H; ++i) {
        for (int j = 0; j < W; ++j) {
          if (B[i][j] == '1') mx = max(mx, j);
        }
        for (int j = 0; j <= mx; ++j) {
          B[i][j] = '0' + (B[i][j] == '0');
        }
      }

      if (mx == -1) break;
      ++cnt;
    }

    return cnt;
  }
};