Olá à todos.,
Estou tendo dificuldade para resolver uma questão da Olimpíada brasileira de Informática fase 2 de 2016, é a última questão desse pdf: https://olimpiada.ic.unicamp.br/static/extras/obi2016/provas/ProvaOBI2016_f2pu.pdf
import java.util.Scanner;
public class solucao {
public static int[] organizaValores(String linha) {
String[] semEspaco = linha.split("\\s+"); return new int[] { Integer.parseInt(semEspaco[0]), Integer.parseInt(semEspaco[1]) };}
static int[][] entradas;
static int m,n;
static int[] saida;public static void main(String[] args) {
//entradaScanner in = new Scanner(System.in); String linha1 = in.nextLine(); int[] array1 = organizaValores(linha1); n = array1[0]; m = array1[1]; entradas = new int[m][2]; for (int i = 0; m > i; i++) { String linhaNova = in.nextLine(); int[] arrayNovo = organizaValores(linhaNova); entradas[i] = new int[]{arrayNovo[0], arrayNovo[1]}; }//processamento
saida = new int[n]; for (int i = 0; n > i; i++) { saida[i] = 0; } //saida for (int i = 0; n > i; i++) { System.out.print(saida[i] + (i == n-1 ? "" : " ")); }}
}
Basicamente o que só consegui fazer de “certo”.
O que eu entendi sobre a questão é:
Ele dá um mapa pela entrada dizendo quais intersecções tem ciclovias entre elas e na saída é esperado o maior número possível de intersecções por qual ele passa(ele chama isso de maior caminho possível) para cada intersecção que ele existe.
No exemplo 1 da questão ele dá esses dados:
5 5 (número de intersecções(variável “n”) e número de ruas(variável “m”) )
1 5 (as próximas “m” linhas são duas intersecções em que há uma ciclovia)
1 3
1 2
2 5
4 5
E a saída é uma única linha com os números:
4 4 4 2 2
Em uma das minhas tentativas(usando o exemplo 1) achei que dava para fazer caminhos automáticos por tentativa e erro(não vou mostrar esse código porque ficou enorme e “feio”, além de dar errado, mas a lógica dele é essa abaxo):
Se o mapa fosse um gráfico assim(os traços seriam as ciclovias):
3
|
1-5-4
| |
2-
E os caminhos tentados ficariam assim, para o primeiro número da saída, iniciando na intersecção 1:
1-2-5-4(tamanho seria 4)
1-3 (tamanho seria 2)
1-5-4 (tamanho seria 3)
1-5-2 (tamanho seria 3)
Logo, o maior caminho seria o de maior tamanho.
O maior caminho deve ser uma sequência crescente para os números pares e impares.
Só que quando testei iniciando com a intersecção 3, não passava de tamanho 1.
No site da OBI achei dois exemplos de resposta em C++(https://olimpiada.ic.unicamp.br/passadas/OBI2016/fase2/programacao/) mas não consegui entender muita coisa já que só sei Java(por enquanto).
Não sei o que não entendi direito, faz dias que estou tentado solucionar isso(acho que nem me considero programador mais
).
O que faço?