#include char buf[110][210]; int flag; void reverse(int total) { char tmp[210]; int i; for (i = 0; i < total/2; i++) { strcpy(tmp, buf[i]); strcpy(buf[i], buf[total-i-1]); strcpy(buf[total-i-1], tmp); } } int test(int j, int s, int k) { int i; if(s == k && buf[j][k] == '-') return 1; for (i = s; i < k + 1; i++) { if(buf[j][i] != '-') return 0; } if (!flag) return test(j+1, s, k - 2); else return test(j + 1, s+2, k); } int main() { FILE* f = fopen("triangle.in", "r"); int i, j, k, l; int count = 0; int max = 0, current; char tmp[210]; while(1) { max = 0; fscanf(f, "%d ", &i); if (!i) break; count++; for(j = 0; j < i; j++) { fgets(tmp, sizeof(tmp), f); sscanf(tmp, " %s", buf[j]); } flag = 0; for(j = 0; j < i; j++) { k = 0; current = 0; while(buf[j][k] != 0) { if (current != 0) { if (buf[j][k] == '-') current++; else current = 0; if (k % 2 == 0) { for (l = 1; l <= current; l += 2) { if (l > max) { if (test(j, k - l + 2, k + 1)) max = l; } } } } else if (k % 2 == 0) { if (buf[j][k] == '-') current++; else current = 0; if (current > max && (k % 2 == 0)) { if (test(j, k - current + 1, k)) { max = current; } } } k++; } } reverse(i); flag = 1; for(j = 0; j < i; j++) { k = 0; current = 0; while(buf[j][k] != 0) { if (current != 0) { if (buf[j][k] == '-') current++; else current = 0; if (k % 2 == 1) { for(l = 1; l <= current; l += 2) { if (l > max) { if (test(j, k - l + 1 , k )) max = l; } } } } else if (k % 2 == 1) { if (buf[j][k] == '-') current++; else current = 0; if (current > max && (k % 2 == 1)) { if (test(j, k - current + 1, k)) { max = current; } } } k++; } } printf("Triangle #%d\n", count); printf("The largest triangle area is %d.\n\n", (max + 1)*(max + 1)/4); } return 0; }