(SPOJ) 3773 - Eleições - Solução

import java.io.*;
import java.util.*;
import java.lang.Math;
import java.math.*;

class Main {
    public static void main(String[] args) throws NumberFormatException, IOException {
        Main processando = new Main();
        processando.processa();
      
        System.exit(0);
    }
  
    void processa() throws NumberFormatException, IOException {
        String line = "";
      
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        line = br.readLine();
        StringTokenizer tokenizer = new StringTokenizer(line);
        int qteVotos = Integer.parseInt(tokenizer.nextToken());
      
        //Map<Integer, Integer> candidatoVoto = new TreeMap<Integer, Integer>();
        Integer[] candidatos = new Integer[qteVotos];
        for (int i = 0; i < qteVotos; i++) {
            line = br.readLine();
            //tokenizer = new StringTokenizer(line); -- muito custoso
            Integer voto = Integer.valueOf(line);
            candidatos[i] = voto;
        }
      
        Arrays.sort(candidatos, 0, qteVotos, new Comparator<Integer>() {
        @Override
        public int compare(Integer r1, Integer r2) {
            if (r1 < r2) {
                return +1;
            }
            else if (r1 == r2) {
                return 0;
            }
            else {
                return -1;
            }
        }
        });
          
        int candidato = 0;
        int maior = -1;
        int cand = candidatos[0];
        int contador = 1;              
        for (int i = 1; i < qteVotos; i++) {
            int candNovo = candidatos[i];
            if (candNovo == cand) {
                contador++;
                if (contador > maior) {
                    candidato = candidatos[i];
                    maior = contador;
                }
            }  
            else {
                contador = 1;
            }
            cand = candNovo;
        }
        System.out.println(candidato);
      
        return;
    }
}

Comments

  1. Oi,
    Você poderia postar a solução deste problema em linguagem C?

    ReplyDelete
  2. Oi, Nicole, não sei se verá isso, mas explicando o que fiz em Java:
    1) Fiz a leitura e coloquei cada entrada em uma posição do vetor.
    2) Ordenei o vetor.
    3) Ao final, você deve comparar cada posição com a posição anterior, ver se é o mesmo conteúdo. Se for, você incrementa o contador e verifica se pode atualizar a variável que informa qual a maior quantidade de votos. Se não for igual, seu contador volta a ter o valor 1, pois é um novo valor e a sua primeira aparição.

    ReplyDelete

Post a Comment

Popular posts from this blog

(Coderbyte) Powers of Two - Solução

(Coderbyte) Dash Insert II - Solução

(CoderByte) Number Search - Solução