2012年2月6日月曜日

明日の分

もうね、バカじゃないかと。 SRM 530 Div2
500
完成後のケーキとカッターの形を与えられて、ケーキをカッターの形に取り除いて言ったとき完成形になるかって問題
実装の方針はすぐに思いついたけどvectorとかどう扱っていいか分からなかったので人の解答丸パクリすることに。
それが悪夢の始まりだった…
↓動作したコード
#include<string>
#include<vector>
using namespace std;
class GogoXCake{
public:
 string solve(vector<string>, vector<string>);
};

string GogoXCake::solve(vector<string> cake, vector<string> cutter){
 int i,j,a,b;
 int r1 = ((int)cake.size());
 int c1 = ((int)cake[0].length());
 int r2 = ((int)cutter.size());
 int c2 = ((int)cutter[0].length());
 for(i = 0; i + r2 <= r1; ++i)
  for(j = 0; j + c2 <= c1; ++j){
   bool ok = true;
   for(a = 0; a < r2; ++a)
    for(b = 0; b < c2; ++b)
     if(cutter[a][b] == '.' && cake[a + i][b + j] == 'X')
      ok = false;
   if(ok){
    for(a = 0; a < r2; ++a)
     for(b = 0; b < c2; ++b)
      if(cutter[a][b] == '.')
       cake[a + i][b + j] = 'X';
   }
  }
 bool ok = true;
 for(i = 0; i < r1; ++i)
  if(cake[i] != string(c1,'X'))
   ok = false;
 string res = ok ? "YES": "NO";
 return res;
}
↓動作しなかったコード
#include<string>
#include<vector>
using namespace std;
class GogoXCake{
public:
 string solve(vector<string>, vector<string>);
};

string GogoXCake::solve(vector<string> cake, vector<string> cutter){
 int i,j,a,b;
 int r1 = ((int)cake.size());
 int c1 = ((int)cake[0].length());
 int r2 = ((int)cutter.size());
 int c2 = ((int)cutter[0].length());
 for(i = 0; i + r2 <= r1; ++i)
  for(j = 0; j + c2 <= c1; ++j){
   bool ok = true;
   for(a = 0; a < r2; ++a)
    for(b = 0; b < c2; ++b)
     if(cutter[a][b] == '.' && cake[a + i][b + j] == 'x')
      ok = false;
   if(ok){
    for(a = 0; a < r2; ++a)
     for(b = 0; b < c2; ++b)
      if(cutter[a][b] == '.')
       cake[a + i][b + j] = 'x';
   }
  }
 bool ok = true;
 for(i = 0; i < r1; ++i)
  if(cake[i] != string(c1,'x'))
   ok = false;
 string res = ok ? "YES": "NO";
 return res;
}
お分かりいただけるだろうか。Xが小文字になってる。なんたるミス。
実を言うとこれのせいで1時間位悩んでた。

0 件のコメント:

コメントを投稿