#include #include #include #include #include FILE* fin; int tri [256][256]; int size; #define mmin(a,b) (((a) < (b) ) ? (a) : (b)) int main (void) { fin = fopen ("triangle.in", "rt"); for ( int probn = 1; ; ++probn ) { fscanf (fin, "%d\n", &size); if ( size == 0 ) break; char buff [256]; memset (&tri, 0, sizeof (tri)); int max = 0; for ( int i = 0; i < size; ++i ) { fgets (buff, 256, fin); for ( int j = 0; j < (size-i)*2 - 1; ++j ) { tri[i][i+j] = (( buff[i+j] == '-' ) ? 1 : 0 ); if ( buff[i+j] == '-' ) max = 1; } } for ( int row = 1; row < size; ++row ) for ( int col = row; col < size*2-row-1; col += 2 ) if ( tri[row][col] > 0 && tri[row-1][col] > 0 ) { int p = tri[row][col] = mmin (tri[row-1][col-1], tri[row-1][col+1])+1; if ( p > max ) max = p; } for ( int row = size-2; row >= 0; --row ) for ( int col = row+1; col < size*2-row-1; col += 2 ) if ( tri[row][col] > 0 && tri[row+1][col] > 0 ) { int p = tri[row][col] = mmin (tri[row+1][col-1], tri[row+1][col+1])+1; if ( p > max ) max = p; } printf ("Triangle #%d\nThe largest triangle area is %d.\n\n", probn, max*max); } fclose (fin); return 0; }