左上から置けるだけ置いていく。
class GogoXCake { public: string solve(vector <string> ca, vector <string> cu) { int caW=ca[0].size(), caH=ca.size(), cuW=cu[0].size(), cuH=cu.size(); while(1) { int changed=0; REP(y, caH-cuH+1) REP(x, caW-cuW+1) { int ok=1; REP(yy, cuH) REP(xx, cuW) { if(ca[y+yy][x+xx]=='X' && cu[yy][xx]=='.') ok=0; } if(ok) { REP(yy, cuH) REP(xx, cuW) if(cu[yy][xx]=='.') ca[y+yy][x+xx]='X'; changed=1; } //REP(y, caH) cout<<ca[y]<<endl; } if(changed==0) break; } REP(y, caH) REP(x, caW) if(ca[y][x]=='.') return "NO"; return "YES"; }