12. Juli 2005
1 Einführung 2 3 4
Der ACM ICPC ACM ICPC Der International Collegiate Programming Contest (ICPC) wird von der Association for Computing Machinery (ACM) seit 1977 veranstaltet. Er ist einer der ältesten und größten Programmierwettbewerbe der Welt.
Die Ausscheidungen Local Contests - Lokale Ausscheidung an jeder Universität. Regional Contests - Regionale Ausscheidungen überall auf der Welt. World Finals - Internationale Endausscheidung.
Die Wettbewerbe ein Computer für jedes Team à drei Teilnehmern mindestens sechs Problemstellungen mindestens fünf Stunden automatisiertes Bewerten der Lösungen Bewertung nach Anzahl der gelösten Probleme und Gesamtzeit
Problemkategorien Suchprobleme Graphenprobleme Geometrieprobleme Dynamische Programmieren Triviale Probleme...
Problemlösungsfähigkeiten Programmierfähigkeiten Kooperationsfähigkeit
Flüchtigkeitsfehler Paris in the the Spring primitive Fehler suchen Randbedingungen überprüfen Herumdoktern unterlassen Korrekturen verifizieren
Denkfehler Spezialfälle kontrollieren arithmetischer Unter- oder Überlauf Rundungsfehler beachten
Debuggen Teufelswerkzeug Debugger Interaktives Debuggen vergeudet kostbare Computerzeit. Findet sich der Fehler nicht innerhalb kurzer Zeit, sollte der Programmierer möglichst aussagekräftige Debug-Ausgaben anfertigen und diese ausdrucken.
Defensives Programmieren Definition Unter defensivem Programmieren versteht man fehlertolerantes Programmieren. frühzeitiges Erkennen von Fehlern Zusicherungen (z.b. assert()) einbauen großzügige Arraygrößen Implementierungs- versus Debugzeit
Das Dilemma Im Normalfall darf nur ein Computer von drei Leuten zur Lösung von Problemen verwendet werden. Eine gute Absprache zwischen den Teammitgliedern ist unbedingt nötig - wer, wann, wie lange den Computer benutzen darf.
Naiver Ansatz Definition Jeder liest einige Probleme, sucht sich eines aus und implementiert eine Lösung wenn der Computer frei ist. nahezu optimal für Genies minimaler Trainingsaufwand kurze Gesamtzeit keine Kooperation
Spezialisierung Spezialisierung der Teammitglieder auf...... untersch. Problemkategorien effizienteres und zuverlässigeres Lösen Single Point of Failure ausgeglichene Fähigkeiten... ind. Fähigkeiten Programmierer vs. Analytiker besonders bei unterschiedlichen Fähigkeiten Verständigung schwierig
Think-Tank Definition Gemeinsames Analysieren einer Problemstellung. korrekteres Einschätzen einer Problemschwierigkeit lohnenswert vor allem zu Beginn des Contests Auswahl der einfachsten Probleme Finden eines Lösungsansatzes
Paar-Programmierung Definition Gemeinsames Implementieren einer Problemstellung. ineffizient bei schwächeren Programmierern oder bei Konzentrationsschwächen weniger Fehler weniger Strafzeiten gute Kooperation nötig
Tipps Üben, üben, üben,... einigt euch auf eine oder mehrere Strategien Programme bereits auf Papier oder in Gedanken planen Computer nur zum Tippen nicht zum Denken teilt euch eure Zeit ein
Tipps alle angefangenen Probleme lösen Ranking verrät einfach Probleme mit zwei Testcases testen Geometrieprobleme nur bei vorgefertigtem Code
Ende Never ever give up!
Quellen I The ACM website http://www.acm.org/ The ICPC website http://icpc.baylor.edu/icpc/ Producing a Programming-Contest Problem Set http://olympiads.win.tue.nl/ioi/guides/
Quellen II Programmierkurs Website Uni-Stuttgart http://www.iste.uni-stuttgart.de/se/teaching/ courses/prokurs/