Jump to content

Problema no output do problema


Super.D
 Share

Recommended Posts

Boa tarde! Tenho um problema que não sei onde está. :/

O exercício é este:

Ponto de água

Os fogos florestais são um dos maiores flagelos que assolam os países nos períodos de maior calor. Durante o combate a um incêndio, é essencial que os tanques dos veículos que estão a ser utilizados (i.e., autotanques, helicópteros e aviões) possam ser reabastecidos no menor espaço de tempo possível. Com esta finalidade, diversos pontos de água (locais onde os veiculos de combate a incêndios podem reabastecer os seus depósitos de água) são identificados no terreno. Devido às suas dimensões e condições gerais nem todos os pontos de água são adequados para encher os depósitos de todos os tipos de veículos.

Problema

Ajuda os bombeiros a determinar qual o ponto de água adequado para um determinado veículo e que se encontra mais próximo deste. Helicópteros e aviões movem-se na horizontal, vertical e diagonal para chegar a um ponto de água. Considera que os autotanques se movem na vertical e na horizontal. Não se podem mover na diagonal.

Dados de entrada

A primeira linha identifica o tipo t de veículo que precisa ser reabastecido (T para autoTanque, H para Helicóptero e A para Avião). A segunda linha contém as coordenadas x e y (separadas por um espaço) correspondentes à localização deste veículo. A terceira linha contém o número n de pontos de água existentes. Finalmente as restantes n linhas têm um número i que identifica o ponto de água, as coordenadas xi e yi (separadas por um espaço) e a descriminação de todos os tipos de veículos que estão aptos a reabastecer os seus tanques neste ponto de água ("T", "TH", ou "THA"), todos separados por um espaço.

Restrições

  • t ∈ {T, H, A}
  • 0 ≤ i ≤ 100000, i inteiro
  • 1 ≤ n ≤ 10000, n inteiro
  • 0 ≤ x, y, xi, yi ≤ 10000, x, y, xi, yi inteiros
  • ti ∈ {T, TH, THA}

Dados de saída

Os dados de saída são compostos por uma única linha com o identificador i do ponto de água mais próximo do veículo de entre aqueles que o veículo pode utilizar para se reabastecer. Se um veículo está à mesma distância de dois ou mais pontos de água, escolha o que tenha o menor identificador i.

Exemplo dos dados de entrada 1

H

10 10

5

5 30 60 T

1 50 50 THA

4 1 1 TH

3 3 15 TH

2 11 10 T

Exemplo dos dados de saída 1

3

Exemplo dos dados de entrada 2

T

10 8

13

13 2 12 THA

9 12 8 TH

0 14 10 T

10 0 8 THA

3 11 3 THA

5 8 11 TH

2 2 4 TH

7 2 12 T

8 7 4 T

1 11 7 THA

11 12 13 TH

6 11 9 TH

12 0 8 T

Exemplo dos dados de saída 2

1

Tudo bem, já o tenho estruturado. O código funciona, no exemplo 1, o output está correto. Mas quando chega ao exemplo dois, o output também está correcto, mas ainda é acrescentada uma linha que acho que é esta (não tenho a certeza): 12 0 8 T

O código é este (está todo junto pois na plataforma que enviou temos de enviar as classes todas juntas):

import java.util.Scanner;

public class MooshakExH {

public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	Veiculo veiculo = new Veiculo(sc.nextLine(), sc.nextInt(), sc.nextInt());
	Distancia distancia;

	double menor = 999;
	int indice = 0;

	int nPontosDeAgua = sc.nextInt();
	Dados[] dados = new Dados[nPontosDeAgua];
	for (int i = 0; i < nPontosDeAgua; i++) {
		dados[i] = new Dados(sc.nextInt(), sc.nextInt(), sc.nextInt(), sc.nextLine());
	}

	for (int i = 0; i < nPontosDeAgua; i++) {
		if (dados[i].getVeiculosAdquados().contains(veiculo.getTipoVeiculo())) {
			distancia = new Distancia(veiculo.getCoordenada_x(), veiculo.getCoordenada_y(), dados[i].getCoordenada_x(), dados[i].getCoordenada_y());

			if (distancia.calcular() < menor) {
				menor = distancia.calcular();
				indice = i;
			}
		}
	}
	System.out.println(dados[indice].getIdentificador());
}
}
class Veiculo {

private String tipoVeiculo;
private int coordenada_x, coordenada_y;

public Veiculo(String tipoVeiculo, int coordenada_x, int coordenada_y) {
	this.tipoVeiculo = tipoVeiculo;
	this.coordenada_x = coordenada_x;
	this.coordenada_y = coordenada_y;
}
public String getTipoVeiculo() {
	return tipoVeiculo;
}
public int getCoordenada_x() {
	return coordenada_x;
}
public int getCoordenada_y() {
	return coordenada_y;
}
}
class Dados {

private int identificador;
private int coordenada_x;
private int coordenada_y;
private String veiculosAdquados;
public Dados(int identificador, int coordenada_x, int coordenada_y, String veiculosAdquados) {
	this.identificador = identificador;
	this.coordenada_x = coordenada_x;
	this.coordenada_y = coordenada_y;
	this.veiculosAdquados = veiculosAdquados;
}
public int getIdentificador() {
	return identificador;
}
public int getCoordenada_x() {
	return coordenada_x;
}
public int getCoordenada_y() {
	return coordenada_y;
}
public String getVeiculosAdquados() {
	return veiculosAdquados;
}
}
class Distancia {
private int TransporteDistancia_x;
private int TransporteDistancia_y;
private int PontoDeAgua_x;
private int pontoDeAgua_y;
private double distancia_total;
public Distancia(int TransporteDistancia_x, int TransporteDistancia_y, int PontoDeAgua_x, int pontoDeAgua_y) {
	this.TransporteDistancia_x = TransporteDistancia_x;
	this.TransporteDistancia_y = TransporteDistancia_y;
	this.PontoDeAgua_x = PontoDeAgua_x;
	this.pontoDeAgua_y = pontoDeAgua_y;
}
public int getTransporteDistancia_x() {
	return TransporteDistancia_x;
}
public int getTransporteDistancia_y() {
	return TransporteDistancia_y;
}
public int getPontoDeAgua_x() {
	return PontoDeAgua_x;
}
public int getPontoDeAgua_y() {
	return pontoDeAgua_y;
}

public double calcular() {
	double temp;

	temp = Math.pow(this.PontoDeAgua_x - this.TransporteDistancia_x, 2)
		   +
		   Math.pow(this.pontoDeAgua_y - this.TransporteDistancia_y, 2);

	distancia_total = Math.sqrt(temp);

	return distancia_total;
}
}
Link to comment
Share on other sites

A questão está dentro do spoiler...

Tenho de introduzir qual o tipo de veiculo (se é autoTanque, Helicopetero ou Avião), em seguida introduzo as coordenadas onde o veiculo se encontra, depois quantos pontos de água têm disponíveis. Depois cada linha que introduzo é seguida de um identificador, da coordenada x e y e o tipo de veiculos, exemplo THA (qualquer veiculo pode abastecer).

Depois tenho calcular qual o ponto mais perto das coordenadas do veiculo e retornar o identificador mais proximo.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.