Follows 161.c (Total 72 lines):

/* @JUDGE_ID:4461XX 161 C */
/* A */
struct light{
	int type[2] ;
	/* 0->red , 1->green */
}light[100] ;
int min_red ;
void make_light( int red_time , int tail )
{
	light[tail].type[0] = red_time ;
	light[tail].type[1] = red_time-5 ;
	if( !tail ) min_red = red_time ;
	else
		if( min_red > red_time ) min_red = red_time ;
}
int IsGreen( int time , int which )
{
	if( time >= 2*light[which].type[0]/* cycle */ )
		time %= 2*light[which].type[0] ;
	if( time < light[which].type[1] ) return 1 ;
	return 0 ;
}
void print_time( int second )
{
	int hour , minute ;
	minute = second / 60 ;
	second %= 60 ;
	hour = minute / 60 ;
	minute %= 60 ;
	printf( "%02d:%02d:%02d\n" , hour , minute , second ) ;
}
void count( int tail )
{
	int i , j , yes , end ;
	for( i=min_red-5 ; ; i++ )
		if( i <= 18000 ){ /* 60*60*5 */
			for( yes=1 , j=0 ; j<tail ; j++ )
				if( !IsGreen( i , j ) ){
					yes = 0 ;
					break ;
				}
			if( yes ){
					end = i ;
					print_time( end ) ;
					break ;
			}
		}
		else{
			puts( "Signals fail to synchronise in 5 hours" ) ;
			break ;
		}

}
void main( void )
{
	int red_time , tail , end=0 ;
	while( !end )
		for( tail=0 ; ; tail++ ){
			scanf( "%d" , &red_time ) ;
			if( !red_time )
				if( tail ){
					count( tail ) ;
					break ;
				}
				else{
					end = 1 ;
					break ;
				}
			else make_light( red_time , tail ) ;
		}
}
/* @END_OF_SOURCE_CODE */

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