Rezultati

Up. imeNalogaJezikRezultatČas oddaje
avokado-2018 Prehitevanje Java 0/100Napaka med izvajanjem / ob izhodu (RTE) 04. okt '18 @ 19:14

Test Točke Porabljen spomin Porabljen čas Status
#1 0/16 33,746 MiB 0,000 s Program je končal z neničelno kodo
Stderr:
Exception in thread "main" java.lang.NullPointerException
	at Seznam.overtake(prehitevanje.java:102)
	at prehitevanje.main(prehitevanje.java:21)
#2 0/16 34,785 MiB 0,000 s Program je končal z neničelno kodo
Stderr:
Exception in thread "main" java.lang.NullPointerException
	at Seznam.overtake(prehitevanje.java:101)
	at prehitevanje.main(prehitevanje.java:21)
#3 0/17 35,344 MiB 0,000 s Program je končal z neničelno kodo
Stderr:
Exception in thread "main" java.lang.NullPointerException
	at Seznam.overtake(prehitevanje.java:101)
	at prehitevanje.main(prehitevanje.java:21)
#4 0/17 48,039 MiB 2,301 s Program je končal z neničelno kodo
Stderr:
Exception in thread "main" java.lang.NullPointerException
	at Seznam.overtake(prehitevanje.java:101)
	at prehitevanje.main(prehitevanje.java:21)
#5 0/17 59,965 MiB 4,311 s Prekoračen čas
#6 17/17 34,664 MiB 0,000 s OK

Ocenjevani program (prehitevanje.java):
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class prehitevanje {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		int n = Integer.parseInt(br.readLine());
		Seznam sez = new Seznam();
		for (int i = 0; i < n; i++) {
			sez.add(br.readLine());
		}

		int p = Integer.parseInt(br.readLine());
		for (int i = 0; i < p; i++) {
			String[] names = br.readLine().split(" ");
			if (names[0].equals(names[1])) {
				continue;
			}
			sez.overtake(names[0], names[1]);
		}
		sez.izpis();

	}
}

class Node {
	String name;
	Node next = null;

	public void add(String name) {
		if (next == null) {
			next = new Node();
			next.name = name;
		} else {
			next.add(name);
		}
	}

	public void izpis() {

	}
}

class Seznam {
	Node root = null;
	Node end = null;

	public void add(String name) {
		if (root == null) {
			root = new Node();
			root.name = name;
			end = root;
		} else {
			end.add(name);
			end = end.next;
		}
	}

	public void izpis() {
		Node tmp = root;

		while (tmp != null) {
			System.out.println(tmp.name);
			tmp = tmp.next;
		}
	}

	public void overtake(String name1, String name2) {
		Node tmp = root;
		Node prevEna = null;
		Node prevDva = null;
		Node ena = null;
		Node dva = null;

		if (tmp != null) {
			if (tmp.name.equals(name1)) {
				ena = tmp;
			} else if (tmp.name.equals(name2)) {
				dva = tmp;
			}
		}

		while (tmp != null && tmp.next != null) {
			if (tmp.next.name.equals(name1)) {
				prevEna = tmp;
				ena = prevEna.next;
			} else if (tmp.next.name.equals(name2)) {
				prevDva = tmp;
				dva = prevDva.next;
			}
			if (prevEna != null && prevDva != null) {
				break;
			}
			tmp = tmp.next;
		}

		if (prevEna == null) {
//			System.out.println("ena je root");
			root = ena.next;
			prevDva.next = ena;
			ena.next = dva;
		} else if (prevDva == null) {
//			System.out.println("I am groot");
			root = ena;
//			System.out.println(prevEna.name);
//			System.out.println(ena.name);
//			System.out.println(dva.name);
			prevEna.next = ena.next;

			root.next = dva;

		} else {
			// Node ena = prevEna.next;
			// Node dva = prevDva.next;
			Node tmpEnaNext = ena.next;

			prevDva.next = ena;
			prevDva.next.next = dva;
			prevEna.next = tmpEnaNext;
		}

	}

}