Cod sursa(job #638860)

Utilizator liviu12345Stoica Liviu liviu12345 Data 21 noiembrie 2011 19:42:52
Problema Tm Scor 0
Compilator c Status done
Runda arhiva-teme-fmi Marime 1.46 kb
#include <stdio.h>

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

  /**
   * Testez 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 ;

  /**
   * Testez daca |a|==|b|
   */
  
  while( banda[ i ]=='a' ){
    banda[ i ]='A' ;
    while( banda[ ++i ]=='a' ) ;
    while( banda[ i ]=='B' ) ++i ;
    if( banda[ i ]=='b' ) banda[ i ]='B' ;
    else {
      test = 0 ;
      while( banda[ --i ]=='B' ) banda[ i ]='b' ;
      ++i ;
      break ;
    }
    while( banda[ --i ]=='B' ) ;
    while( banda[ i ]=='a' ) --i ;
    ++i ;
  }

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

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

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