(UVA) 10137 - The Trip - Solução
import java.io.*;
import java.util.*;
import java.lang.Math;
import java.text.NumberFormat;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.math.*;
class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
Main processando = new Main();
processando.takeInput();
System.exit(0);
}
void takeInput() throws NumberFormatException, IOException {
String line = "";
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while ((line = br.readLine()) != null) {
StringTokenizer tokenizer = new StringTokenizer(line);
Integer qteEntradas = Integer.parseInt(tokenizer.nextToken());
ArrayList<Integer> qteGasta = new ArrayList<Integer>();
if (qteEntradas == 0) {
return;
}
Integer i;
Integer soma = 0;
for (i = 0; i < qteEntradas; i++) {
String leGastos = br.readLine();
tokenizer = new StringTokenizer(leGastos);
// Transforma entrada para Integer e adiciona no Array
qteGasta.add((int)(Double.parseDouble(tokenizer.nextToken())*100+0.1));
// Calcula a quantidade gasta pelos viajantes
soma += qteGasta.get(i);
}
// Calcula gasto médio
Integer media = soma/qteEntradas;
// Verifica quantas pessoas podem receber $0,01 a mais
Integer ficaUmAcima = soma%qteEntradas;
Integer ficaUmAbaixo = qteEntradas - ficaUmAcima;
// Verifica qual vai ser o valor a ser trocado entre os viajantes
soma = 0;
for (i = 0; i < qteEntradas; i++) {
// Se a pessoa gastou menos do que a média gasta
if ((qteGasta.get(i) - media) <= 0) {
// Ela tem que atingir no mínimo a média
soma += Math.abs(qteGasta.get(i) - media);
// A pessoa só é propensa a ganhar $0,01 se não tem mais quem ficaUmAbaixo
if (ficaUmAbaixo <= 0) {
soma += 1;
}
// Menos uma pessoa a ganhar menos
ficaUmAbaixo--;
}
}
// Para poder criar os centavos da resposta
String cents = String.valueOf(soma%100);
if (soma%100 < 10) {
cents = "0" + cents;
}
System.out.println("$" + (soma/100) + "." + cents);
}
return;
}
}
import java.util.*;
import java.lang.Math;
import java.text.NumberFormat;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.math.*;
class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
Main processando = new Main();
processando.takeInput();
System.exit(0);
}
void takeInput() throws NumberFormatException, IOException {
String line = "";
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while ((line = br.readLine()) != null) {
StringTokenizer tokenizer = new StringTokenizer(line);
Integer qteEntradas = Integer.parseInt(tokenizer.nextToken());
ArrayList<Integer> qteGasta = new ArrayList<Integer>();
if (qteEntradas == 0) {
return;
}
Integer i;
Integer soma = 0;
for (i = 0; i < qteEntradas; i++) {
String leGastos = br.readLine();
tokenizer = new StringTokenizer(leGastos);
// Transforma entrada para Integer e adiciona no Array
qteGasta.add((int)(Double.parseDouble(tokenizer.nextToken())*100+0.1));
// Calcula a quantidade gasta pelos viajantes
soma += qteGasta.get(i);
}
// Calcula gasto médio
Integer media = soma/qteEntradas;
// Verifica quantas pessoas podem receber $0,01 a mais
Integer ficaUmAcima = soma%qteEntradas;
Integer ficaUmAbaixo = qteEntradas - ficaUmAcima;
// Verifica qual vai ser o valor a ser trocado entre os viajantes
soma = 0;
for (i = 0; i < qteEntradas; i++) {
// Se a pessoa gastou menos do que a média gasta
if ((qteGasta.get(i) - media) <= 0) {
// Ela tem que atingir no mínimo a média
soma += Math.abs(qteGasta.get(i) - media);
// A pessoa só é propensa a ganhar $0,01 se não tem mais quem ficaUmAbaixo
if (ficaUmAbaixo <= 0) {
soma += 1;
}
// Menos uma pessoa a ganhar menos
ficaUmAbaixo--;
}
}
// Para poder criar os centavos da resposta
String cents = String.valueOf(soma%100);
if (soma%100 < 10) {
cents = "0" + cents;
}
System.out.println("$" + (soma/100) + "." + cents);
}
return;
}
}
Comments
Post a Comment