(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;
}
}
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;
}
}
Oi,
ReplyDeleteVocê poderia postar a solução deste problema em linguagem C?
Oi, Nicole, não sei se verá isso, mas explicando o que fiz em Java:
ReplyDelete1) 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.