Thursday, June 28, 2012

Solución a 158B - Taxi [http://codeforces.com] con Java

Solución a 158B - Taxi [http://codeforces.com] el enlace del problema está en el siguiente link

import java.util.Scanner;

/**
 * 158B - Taxi [http://codeforces.com]
 * 
 * @author BreakDark
 * @version 2.0 beta
 */
// ACEPTADO!!! xD
public class Main {
    public static void main(String[] args) {
        Scanner Lee; // para leer los datos de entrada
        int n; // numero de grupos
        int i; // para los bucles
        int c; // contador de taxis
        int sum1, sum2, sum3, sum4; // sumamos los grupos de 1 a 4 estudiantes
        byte aux; // un auxiliar

        // AQUI INICIA EL PROGRAMA
        Lee = new Scanner(System.in);
        while (Lee.hasNext()) {
            // leemos los datos
            n = Lee.nextInt();
            sum1 = sum2 = sum3 = sum4 = 0;
            for (i = 0; i < n; i++) {
                aux = Lee.nextByte();
                switch (aux) {
                case 1:
                    sum1++;
                    break;
                case 2:
                    sum2++;
                    break;
                case 3:
                    sum3++;
                    break;
                default:
                    sum4++;
                    break;
                }
            }
            // calculamos los taxis necesarios
            c = sum4; // los que necesitan de 4 estudiantes
            if (sum3 > sum1) {
                // sumamos 3 con 1
                c += sum1;
                c += (sum3 - sum1);
                // sumamos los grupos de a dos
                c += Math.ceil((double) sum2 / 2);
            } else {
                c += sum3;
                sum1 -= sum3;
                // sumamos los grupos de a dos
                c += sum2 >> 1;
                // si solo queda un grupo de a dos
                if ((sum2 & 1) == 1) {
                    c++;
                    sum1 -= 2;
                }
                // si aun quedan grupos de a 1
                if (sum1 > 0)
                    c += Math.ceil((double) sum1 / 4);
            }
            // mostramos el resultado
            System.out.println(c);
        }
    }
}

No comments: