Cod sursa(job #638872)

Utilizator liviu12345Stoica Liviu liviu12345 Data 21 noiembrie 2011 20:09:03
Problema Tm Scor 100
Compilator c Status done
Runda arhiva-teme-fmi Marime 1.4 kb
#include <stdio.h>

int valid( char* banda ){
  int i = 0 , test = 1 ;

  // Apartenenta la a*b*c*
  while( banda[ ++i ]=='a' ) ; --i ;
  while( banda[ ++i ]=='b' ) ; --i ;
  while( banda[ ++i ]=='c' ) ;
  if( banda[ i ] ) return 0 ;

  i = 1 ;

  // |a|==|b| Verificare
  while( banda[ i ]=='a' ){
    banda[ i ]='A' ;
    while( banda[ ++i ]=='a' ) ; --i ;
    while( banda[ ++i ]=='B' ) ;
    if( banda[ i ]=='b' ) banda[ i ]='B' ;
    else {
      while( banda[ --i ]=='B' ) banda[ i ]='b' ; ++i ;
      goto party ;
    }
    while( banda[ --i ]=='B' ) ; ++i ;
    while( banda[ --i ]=='a' ) ; ++i ;
  }

  --i ; while( banda[ ++i ]=='B' ) ;
  if( banda[ i ] != 'b' ) return 1 ;
  else while( banda[ --i ]=='B' ) banda[ i ]='b' ; ++i ;

  // |b|==|c| Verificare
  party:
  
  while( banda[ i ]=='b' ){
    banda[ i ]='B' ;
    while( banda[ ++i ]=='b' ) ; --i ;
    while( banda[ ++i ]=='C' ) ;
    if( banda[ i ]=='c' ) banda[ i ]='C' ;
    else return 0 ;
    while( banda[ --i ]=='C' ) ; ++i ;
    while( banda[ --i ]=='b' ) ; ++i ;
  }

  --i ; while( banda[ ++i ]=='C' ) ;
  return banda[ i ]==0 ;
}

int main( ) {
  freopen( "tm.in" , "r" , stdin ) ;
  freopen( "tm.out" , "w" , stdout ) ;
  char banda[ 1002 ] ;  int T , i ;
  banda[0] = 'S' ;
  scanf( "%d" , &T ) ;
  for ( i = 0 ; i < T ; ++i ){
    scanf( "%s" , banda+1 ) ;
    if( valid( banda ) ) printf( "DA\n" ) ;
    else printf( "NU\n" ) ;
  }
  return 0 ;
}