解いた問題

2/07/2013

SRM569 Div1 Easy

250

各桁に関して、1が2個、0が1個必要。


class TheDevice {
public:
  int minimumAdditional(vector <string> v)
  {
    const int M = v[0].size();
    int o[M], z[M];
    fill(o, o + M, 0);
    fill(z, z + M, 0);

    for (int i = 0; i < v.size(); ++i) {
      for (int j = 0; j < v[i].size(); ++j) {
        o[j] += (v[i][j] == '1');
        z[j] += (v[i][j] == '0');
      }
    }

    int ret = 0;
    while (true) {
      string s;
      for (int i = 0; i < M; ++i) {
        if (o[i] < 2) {
          s += '1';
          ++o[i];
          continue;
        }
        if (z[i] < 1) {
          s += '1';
          ++z[i];
          continue;
        }
        s += '@';
      }
      cout << s << endl;
      if (count(s.begin(), s.end(), '@') == s.size()) break;
      ++ret;
    }
    return ret;
  }
};