解いた問題

2/20/2012

SRM530 Div1 Easy

250
端から押し当てればいい。
本番で提出したコード
class GogoXCake {
public:
  string solve(vector <string> cake, vector <string> cutter) 
  {
    int ucell = 0;
    for (int i = 0; i < cutter.size(); ++i) {
      ucell += count(cutter[i].begin(), cutter[i].end(), '.');
    }

    for (int i = 0; i < cake.size(); ++i) {
      for (int j = 0; j < cake[i].size(); ++j) {
        int c = 0;   
        for (int k = 0; k < cutter.size() && i + k < cake.size(); ++k) {
          for (int l = 0; l < cutter[k].size() && j + l < cake[i + k].size(); ++l) {
            if (cutter[k][l] == '.' && cake[i + k][j + l] == '.') {
              ++c;
            }
          }
        }
        if (c == ucell) {
          for (int k = 0; k < cutter.size(); ++k) {
            for (int l = 0; l < cutter[k].size(); ++l) {
              if (cutter[k][l] == '.' && cake[i + k][j + l] == '.') {
                cake[i + k][j + l] = 'X';
              }
            }
          }
        }
      }
    }    

    for (int i = 0; i < cake.size(); ++i) {
      for (int j = 0; j < cake[i].size(); ++j) {
        if (cake[i][j] == '.') return "NO";
      }
    }
    
    return "YES";
  }

};

0 件のコメント :

コメントを投稿