CSES - Työlista

Tehtäväsi on toteuttaa tietorakenne, joka pitää yllä tehokkaasti työlistaa. Listalle voi lisätä uuden tehtävän, jolla on tietty nimi ja prioriteetti, sekä listalta voi hakea käsittelyyn suurimman prioriteetin tehtävän.

Voit olettaa, että työtehtävän nimi muodostuu merkeistä az ja 09 ja prioriteetti on kokonaisluku välillä 0 \dots 10^9.

Python

Toteuta tiedostoon tasks.py luokka Tasks, jossa on seuraavat funktiot:

  • add: lisää listalle työtehtävän, jolla on tietty nimi ja prioriteetti
  • next: poistaa listalta korkeimman prioriteetin työtehtävän ja antaa sen nimen (jos vaihtoehtoja on monta, valitaan aakkosjärjestyksessä ensimmäinen)

Kummankin funktion tulee toimia tehokkaasti.

class Tasks:
    def add(self, name, priority):
        # TODO

    def next(self):
        # TODO

if __name__ == "__main__":
    t = Tasks()
    t.add("siivous",10)
    t.add("ulkoilu",50)
    t.add("opiskelu",50)
    print(t.next()) # opiskelu
    t.add("treffit",100)
    print(t.next()) # treffit
    print(t.next()) # ulkoilu

Java

Toteuta tiedostoon Tasks.java luokka Tasks, jossa on seuraavat metodit:

  • add: lisää listalle työtehtävän, jolla on tietty nimi ja prioriteetti
  • next: poistaa listalta korkeimman prioriteetin työtehtävän ja antaa sen nimen (jos vaihtoehtoja on monta, valitaan aakkosjärjestyksessä ensimmäinen)

Kummankin metodin tulee toimia tehokkaasti.

public class Tasks {
    public void add(String name, int priority) {
        // TODO
    }

    public String next() {
        // TODO
    }

    public static void main(String[] args) {
        Tasks t = new Tasks();
        t.add("siivous",10);
        t.add("ulkoilu",50);
        t.add("opiskelu",50);
        System.out.println(t.next()); // opiskelu
        t.add("treffit",100);
        System.out.println(t.next()); // treffit
        System.out.println(t.next()); // ulkoilu
    }
}