# 1. Qualifikationsrunde

Du möchtest an der Informatikolympiade teilnehmen? Dann registiere dich für die 1. Qualifikationsrunde der diesjährigen Informatikolympiade (AOI 2024).

Dannach hast du bis zum 7. Januar 2024 23:59 Zeit, die Aufgaben zu lösen. Die besten Teilnehmer:innen qualifizieren sich für das 1. Trainingscamp.

# So kannst du teilnehmen

  1. Besuche unsere "Portal"-Seite (opens new window) und registriere dich mit deiner E-Mail-Adresse.

    Bitte checke diese E-Mail-Adresse regelmäßig. Wir werden dir darüber unter anderem mitteilen, ob du dich qualifiziert hast.

  2. Vervollständige dein Profil (opens new window). Wir benötigen diese Informationen, um dich als Schüler:in entsprechend unserer Teilnahmebedingungen zu verifizieren, sowie um mit deiner Schule bei einer etwaigen Qualifizierung in Kontakt zu treten. Für mehr Information bezüglich der Verarbeitung deiner Daten siehe unsere Datenschutzerklärung (opens new window)

  3. Melde dich für den Wettbewerb "2024. 1. Qualifikation" (opens new window) an.

  4. Lies dir die Aufgabenstellung durch und versuche das Problem zu lösen. Um deinen Code einzuschicken, kannst du entweder direkt im Browser programmieren oder eine fertige Datei hochladen. Mit einem Knopfdruck auf "Abschicken" wird dein Programm ausgeführt und getestet, nach kurzer Zeit erfährst du dann, wie viele Punkte deine Lösung erreicht hat.

  5. (optional): Trete unserem Discord Server (opens new window) bei (hier kannst du mit anderen Teilnehmer:innen sowie Trainer:innen in Kontakt treten) und folge uns auf Instagram (opens new window) & Twitter (opens new window). Teile die AOI mit deinen Freunden!

Los gehts!

# Weitere Informationen

# Was ist die Informatikolympiade?

Wir sind ein österreichweiter Schüler:innen Wettbewerb im Fachbereich Informatik. Die Wettbewerbsaufgaben sind Problemstellungen, für welche du jeweils einen Algorithmus entwickeln musst, um sie zu lösen. Das schwierige ist hierbei, dass die Ausführungszeit, sowie der Speicherverbrauch deines Algorithmuses begrenzt ist. Du musst also nicht nur das Problem lösen, sondern auch einen Weg finden es effizient zu lösen.

Die besten Teilnehmer qualifizieren sich dann für die International Olympiad in Informatics (IOI) (opens new window) oder die Central European Olympiad in Informatics (CEOI) (opens new window).

Die Informatikolympiade ist aber auch: Coole Trainigswochen bei denen du andere Informatiker:innen kennenlernen kannst und viel über Computer Science lernst.

# Was soll ich lösen? Was ist dieses Zeitlimit/Speicherlimit?

Bei der Informatikolympiade geht es darum effizienten Code zu schreiben. Effizient in dem Sinne, dass er selbst bei großen Eingabegrößen noch in innerhalb des Zeit- und Speicherlimits läuft.

Das bedeutet aber nicht, dass du jede Zeile Code bis ins kleinste Detail optimieren sollst. Es reicht vollkommen aus einen effizienten Lösungsansatz zu wählen.

Ein Beispiel: Wir haben ein sortiertes Array a mit n Zahlen und wollen feststellen, ob das Element c darin enthalten ist.

Wir können natürlich linear jedes Element durchgehen und so herausfinden, ob das Element existiert:

# Pseudocode
for x in a: 
  if x == c: 
    return True
return False

Da die Array sortiert ist, können wir das Element mittels Binary Search (opens new window) finden. Damit müssen wir nur noch einen Bruchteil der Elemente durchgehen, um die Frage zu beantworten. Dieser Algorithmus ist von der Zeitkomplexität daher effizienter als die lineare Suche von zuvor.

# Pseudocode
lo, hi = 0, len(a)-1
while lo <= hi:
  mid = (lo+hi) / 2
  if a[mid] == c: return True
  else if a[mid] < c: lo = mid + 1
  else: hi = mid - 1
return False

# Welche Programmiersprachen sind erlaubt?

Für die 1. Qualifikationsrunde haben wir folgende Programmiersprachen aktiviert:

  • C++ (C++20, mit gcc v11.2.0)
  • Java (OpenJDK v11.0.16)
  • Rust (v1.59.0)
  • Python 3 (v3.10.6)

Wir schreiben unsere Musterlösungen in C++, und testen nicht unbedingt jede Aufgabe in jeder Sprache. Erfahrungsgemäß sind gewisse Programmiersprachen teilweise deutlich langsamer bei dieser Art von Aufgaben.

Besonders Python ist besonders langsam. Potentiell sind bei manchen Aufgaben 100 Punkte selbst mit effizienten Lösungen in diesen Sprachen nicht erreichbar.

Java ist meistens schnell genug, aber manche Konzepte wie List<Integer> in Java sind aufgrund des Speichermodells sehr langsam.

Beachte: Für die Trainingscamps und den Bundeswettbewerb erlauben wir nur C++. Das liegt daran, dass bei den internationalen Wettbewerben auch nur C++ erlaubt ist.

# Wie verwende ich das Online-Abgabesystem?

Die Wettbewerb Seite

Dies ist die "Wettbewerb"-Seite. Hier siehst du wie viele Punkte du erreicht hast, und kannst dich zu den Aufgaben durchklicken. Zusätzlich siehst du hier (falls du ≠0 Punkte hast) auf welchem Rang du derzeit bist, und Ankündigungen die wir nutzen, falls es im Laufe der Qualifikationsrunde Unklarheiten gibt.

Falls du eine Frage zum Bewerb oder einer Aufgabe hast, kannst du sie auf dieser Seite in das "Fragen" Formular eingeben, und wir werden sie alsbald beantworten.

Wenn du zu der Seite einer Aufgabe gehst siehst du diesen Inhalt:

Die Aufgaben-Seite

Links befinden sich Informationen zur Aufgabe sowie deine Einsendungen für diese Aufgabe.

Unter Problemstellung kannst du die Aufgabe ansehen bzw. als PDF herunterladen und Anhänge zu der Aufgabe herunterladen. Des weiteren siehst du unter "Deine Einsendungen" welchen Code du bereits eingereicht hast. Wenn du auf einen Eintrag klickst erhälst du mehr Informationen zu dem Ergebnis (welche Testfälle das richtige Ergebnis liefern, die Speichernutzung deines Programms etc.)

Rechts ist der "Code Editor". In diesem Feld schreibst du deinen Code bzw. füllst die gegebene Funktion aus. Falls du eine andere Sprache als C++ verwendest, wähle diese bitte untern in dem Dropdown aus. Mit einem Klick auf "Abschicken" kannst du diese Lösung einsenden, und sie wird im linken Panel unter "Deine Einsendungen" erscheinen.

Zusätzlich gibt es noch den "Test Modus", wenn du diesen Schalter aktivierst, kannst du deinen Code mit eigenen Testfällen online testen. Mit dem "Testen" Knopf kannst du deinen Code mit dieser Eingabe ausführen lassen. Auf der rechten Seite siehst du dann die Ausgabe deines Programms.

# Wie kann ich die Aufgaben in meiner IDE/Texteditor lösen?

Du kannst die Aufgaben natürlich auch lokal mit dem Texteditor deiner Wahl lösen. Lade dafür unter Anhänge in der jeweiligen Aufgabe die ZIP-Datei herunter. Je nach Sprache sind jeweils zwei Dateien enthalten (grader - Der Code der die Eingabe einliest, und die Datei in die dein Code kommt).

Zum Einschicken kannst du den Dateiinhalt dann in den Code-Editor kopieren und abschicken.

Ändere nichts am Template. Besonders in Sprachen wie Java/Kotlin ist es wichtig, dass du z.b. den Namen der Klasse und das package nicht änderst.

# Ich habe eine Frage / technische Probleme

Die Website ist dieses Jahr komplett neu entwickelt, daher kann es zu manchen (oder auch mehr ^^) Fehlern kommen. Bitte schreibe uns in diesem Fall eine mail an technical@informatikolympiade.at.

Bitte nutze für inhaltliche Fragen zu Aufgaben das Formular auf der "2023 1. Qualifikationsrunde" (opens new window) Seite. Oder auch unsere Discord Server (opens new window) (aber bei Discord bitte die Fragen so stellen, dass sie nichts von der Lösung hergeben).

Für sonstige Fragen schreibe uns eine E-Mail an orga@informatikolympiade.at.

# Wie viele Punkte sind zum Qualifizieren notwendig?

Kurz gesagt: Es hängt immer vom Jahr / den Aufgaben ab.

Tendenziell reicht es aber praktisch immer aus, jeweils nur die ersten 1-2 (einfacheren) Teilaufgaben zu lösen.

Daher der Tipp: Die 100 Punkte Lösungen sind meist für erfahrenere Teilnehmer:innen gedacht, schaue immer ob es Teilaufgaben gibt, die sich vielleicht leichter lösen könnten.

Dieses Jahr siehst du auf der "Contest"-Seite (opens new window) auf dem wievielten Rang zu derzeit stehst (nur falls Punktezahl ≠0). Beachte aber dass kurz vor Ende der Qualifikationsrunde häufig noch viele Lösungen eingeschickt werden.

Typischerweise werden 20-30 Personen zum 1. Trainingscamp eingeladen (die genaue Anzahl hängt jedes Jahr vom Budget ab, was erst später feststeht).

# Wie oft kann ich meinen Code einschicken?

Es gibt kein Limit für die Anzahl an Einsendungen. Bitte halte deine Einsendefrequenz aber in Grenzen und teste deinen Code bevor du ihn einschickst.

# Wie wird meine Punktezahl ermittelt?

Prinzipiell: Du kannst deine derzeitige Punktezahl für den Wettbewerb / die Aufgaben jederzeit oben auf der Contest Webseite sehen.

Aufgaben sind in Teilaufgaben unterteilt. Für jede gelöste Teilaufgabe bekommst du Punkte. Die Punkte der Teilaufgaben werden über alle Einsendungen summiert. Du kannst also auch für jede Teilaufgabe eine eigene Einsendung machen und bekommst trotzdem die summierte Punkteanzahl.

Ein Beispiel: Es gibt eine Aufgabe mit 2 Teilaufgaben (40+60 Punkte). Ich schicke zunächst eine Lösung ein, die die erste Teilaufgabe, aber nicht die zweite, löst (40P). Dann schicke ich eine Lösung ein, die 30 Punkte bei der zweiten Teilaufgabe erreicht. Für die 1. Teilaufgabe ist das beste Ergebnis 40P, für die zweite 30P. Daher erhalte ich 70 Punkte für diese Aufgabe.

# Wie erfahre ich, ob ich mich qualifiziert habe?

Nach dem Ende der Qualifikationsrunde werden wir dir eine E-Mail schreiben. Natürlich auf die Email-Adresse, mit der du dich angemeldet hast. Dies kann ein paar Tage dauern, da wir davor noch alle Ergebnisse überprüfen (Plagiatscheck etc).

# Wie wird mein Code getestet?

Dein Code wird auf mehreren "Testfällen" ausgeführt. Für jeden Testfall gibt es eine eigene Eingabe die wir absichtlich so erstellen dass sie z.b. Edge-cases für Effizienz abbilden. Ausgeführt werden die Testcases in jeweils einer Sandbox, ohne Zugriff auf Netzwerk etc.

Zusätzlich gibt es für jede Aufgabe noch ein Zeit -und Speicherlimit. Ist dein Programm zu langsam oder braucht zu viel Speicher, wird dein Programm beendet und der jeweilige Testfall gilt als nicht gelöst.

Nur wenn alle Testfälle in einer Teilaufgabe gelöst sind, erhälst du für diese Teilaufgabe Punkte.

# Ein bestimmter Testfall geht nicht, kann ich die Eingabe kriegen?

Nein, das ist nicht möglich. Versuche am besten selbst, besonders langsame/speicherintensive Testfälle zu bauen. Kontrolliere auch noch einmal nach ob dein Algorithmus wirklich alle möglichen Fälle korrekt lösen kann.

Bedenke, selbst wenn dein Programm fast alle Testfälle korrekt löst, muss das nicht heißen, dass du nah an der korrekten Lösung dran bist.

# Was ist das Trainingscamp? Was wird dort gemacht?

Während des 1. Trainingscamps (normalerweise an der TU Wien) lehren die Trainer (größtenteils ehemalige AOI Teilnehmer) verschiedene Lösungstrategien für unsere, sowie die internationalen Aufgaben. Im Laufe der Woche wird z.B. beigebracht was Graphen sind, oder wie Binary Search & Dynamic Programming funktioniert. Wir beginnen aber bei (fast) 0, und zeigen zunächst die Basics von C++.

Selbstverständlich wirst du für diese Zeit von der Schule freigestellt. Die Beherbergung und das Essen werden von der österreichischen Informatikolympiade bezahlt.

# Wer steckt hinter der Informatikolympiade?

➡️ Team

# Weiter Ressourcen

Möchtest du mehr Aufgaben zur Informatikolympiade lösen oder mehr lernen?

Hier sind ein paar Seiten bei denen du üben kannst: