UVa: Problema 10055 – Hashmat the Brave Warrior

4 de March de 2011 | By | Add a Comment

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:

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
 * http://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);
	}
}

Testando a entrada e saída:

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
 * http://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));
    }
}

Bons códigos!

Posts Similares

Filed in: UVa Online Judge | Tags: , , , , , ,

Leave a Reply

Trackback URL | RSS Feed for This Entry