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