UVa: Problema 10055 - Hashmat the Brave Warrior
Vamos resolver o problema nº 10055, chamado de Hashmat the Brave Warrior em java.
No primeiro post, comentei sobre o primeiro problema que geralmente é resolvido no UVa. Vou começar a postar uma série de posts sobre da categoria AOAPC I: Beginning Algorithm Contests. O primeiro volume é o volume 0 - Getting Started. Assim vamos aumentando gradativamente a dificuldade e vamos abordar vários algoritmos, de fácil e difícil.
Descrição do Problema:
Hashmat é um guerreiro que move de um lugar para outro para lutar com seus oponentes. Antes de lutar, ele faz apenas um cálculo: a diferença entre a quantidade de soldados que ele tem e a quantidade de soldados do oponente. Com esse número calculado, ele decide se deve lutar ou não.
No input teremos dois números: n1 e n2. Esse números representam o número de soldados do Hashmat e do oponente ou vice versa. Os números não são maiores que 2^32. Devemos ler a entrada até que não tenha mais nada para ler.
No output (saída) teremos que imprimir a diferença entre os números.
Dicas para resolver o problema em Java:
- Usar BufferedReader e ler até que seja null. Fazer o parser da entrada.
- Usar long em vez de int
- Calcular a difereça absoluta entre os dois números, já que podem vir com a ordem inversa - usar Math.abs();
- Runtime - tempo de execução: 1.980s -Limite: 3s - dicas para melhorar o runtime?
- Lembre-se que para submeter um problema para o Uva, mude o nome da classe para Main e pacote default (não pode pertencer a nenhuma pacote).
Código:
[code lang="java" firstline="1" toolbar="true" collapse="false" wraplines="false"]
package com.loiane.volume0;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* Problem 10055 - Hashmat the Brave Warrior
*
* Use long long data type + absolute function.
*
* Problem Link:
* http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=show_problem&problem=996
*
* Runtime: 1.980s
*
* @author Loiane Groner
* https://loiane.com
* http://loianegroner.com
*/
public class P10055 {
public static void main(String[] args) throws IOException
{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line;
long n1, n2;
String[] num;
while ((line = in.readLine()) != null)
{
num = line.split(" ");
n1 = Long.parseLong(num[0]);
n2 = Long.parseLong(num[1]);
System.out.println(calcAbsDiff(n1,n2));
}
}
public static long calcAbsDiff(long n1, long n2){
return Math.abs(n2-n1);
}
}
[/code]
Testando a entrada e saída:
[code lang="java" firstline="1" toolbar="true" collapse="false" wraplines="false"]
package com.loiane.test.volume0;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import com.loiane.volume0.P10055;
/**
* Test Case
* Problem 10055 - Hashmat the Brave Warrior
*
* @author Loiane Groner
* https://loiane.com
* http://loianegroner.com
*/
public class TestP10055 {
@Test
public void testProblem10055(){
assertEquals(2, P10055.calcAbsDiff(10, 12));
assertEquals(4, P10055.calcAbsDiff(10, 14));
assertEquals(100, P10055.calcAbsDiff(100, 200));
}
}
[/code]
Bons códigos!