Make
Limit: 15s
Jak na to:
Jedná se v podstatě o topologické uspořádání grafu.
package pal; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in, "cp1250")); HashMap<String, Uloha> ulohy = new HashMap<String, Uloha>(); Uloha uloha = null; boolean zacatek = true; Uloha prvni = null; String vz = br.readLine(); while (vz != null) { if (vz.charAt(0) == '\t') { uloha.prikazy.append(vz.substring(1)); uloha.prikazy.append("\n"); } else { StringTokenizer st = new StringTokenizer(vz, " :"); String nazev = st.nextToken(); if (ulohy.containsKey(nazev)) { uloha = ulohy.get(nazev); } else { uloha = new Uloha(); if (zacatek) { prvni = uloha; zacatek = false; } ulohy.put(nazev, uloha); } while (st.hasMoreTokens()) { nazev = st.nextToken(); if (!ulohy.containsKey(nazev)) { ulohy.put(nazev, new Uloha()); } uloha.pridej(ulohy.get(nazev)); } } vz = br.readLine(); } StringBuilder out = new StringBuilder(); prvni.vypis(out); System.out.print(out); } } class Uloha { boolean vypsana = false; boolean navstivena = false; List<Uloha> podulohy = new ArrayList<Uloha>(); StringBuilder prikazy = new StringBuilder(); void pridej(Uloha poduloha) { podulohy.add(poduloha); } void vypis(StringBuilder out) { if (!vypsana) { if (navstivena) { System.out.println("ERROR"); System.exit(0); } navstivena = true; for (Uloha uloha : podulohy) { uloha.vypis(out); } out.append(prikazy); vypsana = true; } } }