#include #include #include #include FILE* input; int T[200][100]; int n; int boucle (int i, int j, int s) { int ok = 1, r; for (int l = 0; l <= 2*s; l++) ok = ok && T[i + l][j - s]; if (ok) { s++; if (s < j) { r = boucle (i, j, s); s = r; } } return s; } int boucle2 (int i, int j, int s) { int ok = 1, r; for (int l = 0; l <= 2*s; l++) ok = ok && T[i - l][j + s]; if (ok) { s++; if (2*(j + s) + i <= 2*n -3 && i - 2*s >= 1) { r = boucle2 (i, j, s); s = r; } } return s; } void handle(int nn) { int j, i, t, s; for (j = 0; j <= n - 1; j++) for (i = 0; i <= 2*(n - j - 1); i++) { char c; fscanf (input, " %c", &c); if (c == '#') T[i][j] = 0; else T[i][j] = 1; } t = 0; for (j = n - 1; j >= 0; j--) for (i = 0; i <= (n - j - 2)*2; i = i + 2) { if (t >= j + 1) break; if (T[i][j]) { s = boucle (i, j, 1); if (t < s) t = s; } } for (j = 0; j <= n - 2*t - 2; j++) for (i = 1 + 2*t; i <= 2*(n - j - s) - 3; i = i + 2) if (T[i][j]) { s = boucle2 (i, j, 1); if (t < s) t = s; } printf ("The largest triangle area is %d.", t*(t - 1)/2 + t*(t + 1)/2); } int main() { input = fopen("triangle.in", "r"); for (int p = 0;; p++) { fscanf (input, "%d", &n); if (n == 0) break; printf("Triangle #%d\n", p + 1); handle(n); printf("\n"); } return 0; }