Ranking (as of 2013-02-05): 165
Language: C++
/* UVa 10908 - Largest Square To build using Visual Studio 2008: cl -EHsc -O2 UVa_10908_Largest_Square.cpp */ #include <cstdio> const int n_max = 100, m_max = 100; char grid[n_max][m_max + 1]; int largest_square(int m, int n, int r, int c) { if (r < 0 || r >= m || c < 0 || c >= n) return 0; char sc = grid[r][c]; int s; for (s = 3; ; s += 2) { int i_min = r - s / 2, i_max = r + s / 2, j_min = c - s / 2, j_max = c + s / 2; if (i_min < 0 || i_max >= m || j_min < 0 || j_max >= n) break; for (int j = j_min; j <= j_max; j++) if (grid[i_min][j] != sc || grid[i_max][j] != sc) goto done; for (int i = i_min + 1; i < i_max; i++) if (grid[i][j_min] != sc || grid[i][j_max] != sc) goto done; } done: return s - 2; } int main() { int t; scanf("%d", &t); while (t--) { int m, n, q; scanf("%d %d %d", &m, &n, &q); getchar(); for (int i = 0; i < m; i++) gets(grid[i]); printf("%d %d %d\n", m, n, q); while (q--) { int r, c; scanf("%d %d", &r, &c); printf("%d\n", largest_square(m, n, r, c)); } } return 0; }
No comments:
Post a Comment