Vorbereitung auf die Informatik-Olympiade
Siehe https://soi.ch/contests/2021/round1/ für die Aufgaben.
Input/Output
Es geht darum, die Datenfiles einzulesen. Das soll direkt vom “Standard Input” erfolgen. Dazu müssen Zahlen und eventuell Strings korrekt geparst werden.
Hier ein Vorschlage für die erste Aufgabe (stairrace):
import sys # Problem loesen def loesen(case, lang, links, rechts): # Loesung ausgeben print("Case #%d: %d" % (case, 42)); # Daten einlesen # Alle print-statements müssen natürlich noch raus... ntest = int(sys.stdin.readline()) print("Es gibt %d Test-Fälle" % ntest) for test in range(ntest): print("Testfall %d" % test) lang = int(sys.stdin.readline()) links = [int(d) for d in sys.stdin.readline().split()] print(links) rechts = [int(d) for d in sys.stdin.readline().split()] print(rechts) print("Lösung:") loesen(test, lang, links, rechts) print("-"*20)
Ausführen mit
python stairrace.py < beispiel2.txt
Und das gleiche in C++:
#include <iostream> using namespace std; void solve(int fall, int lang, int links[], int rechts[]) { cout << "Case #" << fall << " 42" << endl; } int main() { int n; cin >> n; cout << "Testcases : " << n << endl; for (int c=0; c<n; c++) { cout << "Testcase " << c << endl; int lang; cin >> lang; int hoch[2][lang]; for (int seite=0; seite<2; seite++) { for (int h=0; h<lang; h++) { cin >> hoch[seite][h]; cout << hoch[seite][h] << " "; } cout << endl; } solve(c, lang, hoch[0], hoch[1]); } return 0; }
Übersetzen auf der Konsole (Terminal) mit
g++ parse.cpp -o parse
und Ausführen mit
./parse < beispiel2.txt
wobei die in der Datei beispiel2.txt die Eingabe steht.
Aufgabe 1, Treppenlauf
Hinweis: Den Eingabe-Files sind die Lösungen angehängt, sollten aber vom Solver einfach ignoriert werden (weil nach allen Test-Cases).
- Mehr Test-Cases für Teilaufgabe 3: stairrace3.txt und stairrace3b.txt
- Mehr Test-Cases für Teilaufgabe 4 (ohne Gewähr für die Korrektheit): stairrace4.txt.gz
Aufgabe 4, Batterie flicken
- Teilaufgabe 3, TestCases mit möglichen Lösungen