Follows 140.c (Total 104 lines):
/* @JUDGE_ID:4461XX 140 C */
/* A */
#include<stdio.h>
#include<string.h>
int map[26][26] , tmp_used[10] , tmp_tail , min ;
char tmp[10] , ans[10] , min_ans[10] ;
void initial_map( void )
{
int i , j ;
for( i=0 ; i<26 ; i++ )
for( j=0 ; j<26 ; j++ ) map[i][j] = 0 ;
}
int Max( int m , int n )
{
if( m>n ) return m ;
else return n ;
}
void count( void )
{
int i , j , num=0 ;
for( i=0 ; i<tmp_tail ; i++ )
for( j=i+1 ; j<tmp_tail ; j++ )
if( map[ ans[i]-'A' ][ ans[j]-'A' ] ) num = Max( j-i , num ) ;
if( !min ){
min = num ;
strcpy( min_ans , ans ) ;
}
else
if( min>num ){
min = num ;
strcpy( min_ans , ans ) ;
}
}
void print( void )
{
int i ;
for( i=0 ; i<tmp_tail ; i++ )
printf( "%c " , min_ans[i] ) ;
printf( "-> %d\n" , min ) ;
}
void recursive( int level )
{
int i ;
if( level==tmp_tail ){
ans[tmp_tail] = '\0' ;
count() ;
}
else
for( i=0 ; i<tmp_tail ; i++ )
if( !tmp_used[i] ){
ans[level] = tmp[i] ;
tmp_used[i] = 1 ;
recursive( level+1 ) ;
tmp_used[i] = 0 ;
}
}
void swap( char *ch1 , char *ch2 )
{
char tmp ;
tmp = *ch1 ;
*ch1 = *ch2 ;
*ch2 = tmp ;
}
void sort_tmp( void )
{
int i , j ;
for( i=0 ; i<tmp_tail ; i++ )
for( j=i+1 ; j<tmp_tail ; j++ )
if( tmp[i]>tmp[j] ) swap( &tmp[i] , &tmp[j] ) ;
}
void main( void )
{
char arr[100] , *s ;
int i , used[26] ;
while( gets( arr ) ){
if( *arr=='#' ) break ;
initial_map() ;
for( i=0 ; i<26 ; i++ ) used[i] = 0 ; /* initial */
for( min=tmp_tail=0 , s=strtok( arr , ";" ) ; s ; s=strtok( NULL , ";" ) )
for( i=2 ; *(s+i) ; i++ ){
map[ *s-'A' ][ *(s+i)-'A' ] = 1 ;
map[ *(s+i)-'A' ][ *s-'A' ] = 1 ;
if( !used[ *s-'A' ] ){
used[ *s-'A' ] = 1 ;
tmp[tmp_tail++] = *s ;
}
if( !used[ *(s+i)-'A' ] ){
used[ *(s+i)-'A' ] = 1 ;
tmp[tmp_tail++] = *(s+i) ;
}
}
sort_tmp() ;
for( i=0 ; i<10 ; i++ ) tmp_used[i] = 0 ; /* initial */
for( i=0 ; i<tmp_tail ; i++ ) /* recursive */
if( !tmp_used[i] ){
ans[0] = tmp[i] ;
tmp_used[i] = 1 ;
recursive( 1 ) ;
tmp_used[i] = 0 ;
}
print() ;
}
}
/* @END_OF_SOURCE_CODE */
Back to statistics
Ya-Lin Huang (C)
huangyl@gmail.com