Ranking (as of 2015-03-27): 142 out of 176
Language: C++
/*
UVa 12291 - Polyomino Composer
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_12291_Polyomino_Composer.cpp
*/
#include <cstdio>
const int nm_max = 10;
char small[nm_max][nm_max + 1], large[nm_max][nm_max + 1];
bool polyomino(int n, int m, int ssi, int ssj)
{
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
if (large[i][j] == '*') {
for (int si = 0, li = i - ssi; si < m; si++, li++)
for (int sj = 0, lj = j - ssj; sj < m; sj++, lj++)
if (small[si][sj] == '*') {
if (li < 0 || li >= n || lj < 0 || lj >= n || large[li][lj] != '*')
return false;
large[li][lj] = '.';
}
return true;
}
return false;
}
int main()
{
while (true) {
int n, m;
scanf("%d %d", &n, &m);
if (!n)
break;
for (int i = 0; i < n; i++)
scanf("%s", large[i]);
for (int i = 0; i < m; i++)
scanf("%s", small[i]);
int ssi = -1, ssj;
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++)
if (small[i][j] == '*') {
ssi = i, ssj = j;
break;
}
if (ssi != -1)
break;
}
int possible = (polyomino(n, m, ssi, ssj) && polyomino(n, m, ssi, ssj)) ? 1 : 0;
if (possible) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
if (large[i][j] == '*') {
possible = 0;
break;
}
if (!possible)
break;
}
}
printf("%d\n", possible);
}
return 0;
}
No comments:
Post a Comment