Follows 10074.c (Total 61 lines):

/* @JUDGE_ID:4461XX 10074 C */
/* A */
#include<stdio.h>
#define N 100
int map[N+1][N+1] , max=0 ;
int num[N+1][N+1] ;
void left_check( int m , int n )
{
	int i , j ;
	for( i=0 ; i<=m ; i++ )
		for( j=0 ; j<=n ; j++ )
			if( map[i][j] ) num[i][j] = 0 ;
			else num[i][j] = num[i][j-1] + 1 ;
}
void down_check( int m , int n )
{
	int i , j , k , min ;

	max = 0 ;
	for( i=1 ; i<=m ; i++ )
		for( j=1 ; j<=n ; j++ )
			if( num[i][j] ){
				min = num[i][j] ;
				for( k=i ; k<=m ; k++ )
					if( !num[k][j] ) break ;
					else{
						if( num[k][j]<min ) min = num[k][j] ;
						if( min*(k-i+1)>max ) max = min * ( k-i+1 ) ;
					}
			}
}
void initial( int m , int n )
{
	int i ;
	for( i=0 ; i<=n ; i++ ) map[0][i] = 1 ;
	for( i=0 ; i<=m ; i++ ) map[i][0] = 1 ;
}
void input( int m , int n )
{
	int i , j ;
	for( i=1 ; i<=m ; i++ )
		for( j=1 ; j<=n ; j++ )
			scanf( "%d" , &map[i][j] ) ;
}
void main( void )
{
	int m , n ;
/*	freopen( "C:\\windows\\desktop\\10074.in" , "r" , stdin ) ;*/
	while( scanf( "%d %d" , &m , &n ) == 2 ){
		if( !m && !n ) break ;

		initial( m , n ) ;
		input( m , n ) ;

		left_check( m , n ) ;
		down_check( m , n ) ;

		printf( "%d\n" , max ) ;
	}
}
/* @END_OF_SOURCE_CODE */

Back to statistics
Ya-Lin Huang (C)
huangyl@gmail.com