Problema C: Validador de Entrada
Descargar problema: UNMSM-FISI 2011 Problema C
public class ProblemaC { // Indica si se termino de leer la linea static boolean termino; public static void main( String args[] ) throws Exception { int numCasos[]; // Numero de casos que se analizaran int a[], b[]; // Limite inferior y superior del intervalo int[] valoresA; // Almacena los prefijos de 1, 2, ... digitos de a int[] valoresB; // Almacena los prefijos de 1, 2, ... digitos de b int[] numero; // Numero que se analizara int pos; long temp; numCasos = leer(); for( int i = 0; i < numCasos[ 0 ]; i ++ ) { termino = false; a = leer(); b = leer(); // Creamos los prefijos de 1, 2, ... digitos de a y b valoresA = new int[ a[1] ]; valoresB = new int[ a[1] ]; // Hacemos una copia de los valores de a y b int copiaA = a[ 0 ], copiaB = b[ 0 ]; for( int j = valoresA.length - 1; j >= 0; j -- ) { // Guardamos los prefijos valoresA[ j ] = copiaA; valoresB[ j ] = copiaB; // Generamos los siguientes prefijos copiaA /= 10; copiaB /= 10; } System.out.print( "Caso #" + (i+1) + ":" ); // Leemos los numeros a comparar while( !termino ) { numero = leer(); temp = 10l * numero[ 0 ]; if( numero[ 1 ] >= a[ 1 ] ) pos = a[ 1 ] - 1; else pos = numero[ 1 ] - 1; // Si el numero leido es mayor que el limite inferior, debera // estar dentro de los valores del intervalo if( numero[ 0 ] >= valoresA[ pos ] ) { if( numero[ 0 ] <= valoresB[ pos ] ) System.out.print( " 1" ); else System.out.print( " 0" ); } // Si el numero leido es menor que el limite inferior, el mismo // numero multiplicado por 10 debera estar dentro del intervalo else if( temp >= valoresA[ pos ] && temp <= valoresB[ pos ] ) System.out.print( " 1" ); else System.out.print( " 0" ); } System.out.println(); } } // Retorna el siguiente numero de la entrada, ademas de su longitud public static int[] leer() throws Exception { int[] numero = new int[ 2 ]; int car = System.in.read(); while( car > 47 && car < 58 ) { numero[ 0 ] = 10 * numero[ 0 ] + car - 48; numero[ 1 ] ++; car = System.in.read(); } // Si se encontro el fin de linea, indicamos que se termino la linea if( car == '\n' ) termino = true; // Si encontramos una coma nos saltamos el espacio en blanco else if( car == ',' ) System.in.read(); return numero; } }
No hay comentarios:
Publicar un comentario