Saturday, February 25, 2017

Solución al problema: 10002 - El inspector [http://acm.cs.buap.mx] con Java

Para ver el link del problema Click aqui
import java.util.BitSet;
import java.util.PriorityQueue;
import java.util.Scanner;

/**
 * Solución al problema: 10002 - El inspector [http://acm.cs.buap.mx]
 * 
 * @author BreakDark
 * @version 1.0b 17 feb. 2017
 */
// ACEPTADO!!! xD
public class Main {
 public static void main(String[] args) {
  Scanner Lee; // para leer los datos de entrada
  int n; // numero de casos de prueba
  String p; // nombre de la poblacion
  String s; // informacion de los cultivos

  // AQUI INICIA EL PROGRAMA
  Lee = new Scanner(System.in);
  n = Integer.parseInt(Lee.nextLine());
  while (n-- > 0) {
   p = Lee.nextLine();
   s = Lee.nextLine();
   System.out.print(procesar(p, s));
  }
  Lee.close();
 }

 /**
  * Metodo que resueleve el problema
  * 
  * @param p
  *            Nombre de la poblacion
  * @param s
  *            Informacion de los cultivos
  */
 static String procesar(String p, String s) {
  String resp = "";
  // contamos los cultivos
  int dim = 'z' - 'a' + 1, i;
  BitSet tipoCultivos = new BitSet(dim - 1);
  char letra;
  int d = 0; // desconocidos
  int[] cultivos = new int[dim];
  for (i = 0; i < s.length(); i++) {
   letra = s.charAt(i);
   if (letra != '*') {
    tipoCultivos.set(letra - 'a');
    cultivos[letra - 'a']++;
   } else
    d++;
  }
  resp += "POBLACION: " + p + "\n";
  resp += "TIPOS DE CULTIVOS: " + tipoCultivos.cardinality() + "\n";
  resp += "DESCONOCIDOS: " + d + "\n";
  resp += "CANTIDADES:" + "\n";
  // mostramos los conteos de los cultivos
  PriorityQueue cola = new PriorityQueue();
  for (i = 0; i < dim; i++) {
   // adicionamos los valores a una cola de prioridad
   if (cultivos[i] > 0)
    cola.add(new CultivoValor((char) ('a' + i), cultivos[i]));
   // resp += (char) ('a' + i) + " - " + cultivos[i] + "\n";
  }
  // mostramos la cola
  while (!cola.isEmpty()) {
   CultivoValor cv = cola.poll();
   resp += cv.cult + " - " + cv.val + "\n";
  }
  return resp;
 }
}

class CultivoValor implements Comparable {
 char cult;
 int val;

 public CultivoValor(char c, int v) {
  this.cult = c;
  this.val = v;
 }

 @Override
 public int compareTo(CultivoValor X) {
  if (X.val - this.val == 0)
   return this.cult - X.cult;
  return X.val - this.val;
 }
}

No comments: