Tijdens een programmeerwedstrijd moet je met drie mensen en slechts één computer zo veel mogelijk opgaven oplossen in vijf uur tijd. Je kunt hier natuurlijk zonder enige strategie aan beginnen, maar voor een goede klassering is het handig om toch even stil te staan bij hoe je dit gaat aanpakken. In deze Tips & Tricks zal ik wat dingen noemen om over na te denken om zo tot de beste strategie voor jullie team te komen.
De eenvoudigste strategie is om allemaal alleen te werken. Als de wedstrijd begint, worden de opgaven onder de teamleden verdeeld en begint ieder te lezen en te denken. Als iemand een oplossing weet, claimt hij de computer en gaat zijn oplossing programmeren. Een groot nadeel van deze eenvoudige strategie is, dat op een gegeven moment meerdere mensen oplossingen hebben, maar dat de computer continu bezet is. Soms kan het uren duren voordat je een kleine bug in een programma weet te vinden en dat is zonde van de kostbare computertijd. Met deze strategie maak je waarschijnlijk zo'n drie opgaven goed (ieder ééntje), wat meestal een klassering in de middenmoot betekent. Met drie zeer goede teamleden kun je natuurlijk op meer goede oplossingen uitkomen.
In tegenstelling tot de vorige strategie, kun je er ook voor kiezen om samen te werken. Je zou samen opgaven kunnen oplossen, want twee mensen weten meer dan één en kunnen waarschijnlijk sneller tot een oplossing komen. Zeker bij moeilijker problemen kan dit veel voordeel bieden. Je kunt ook ervoor kiezen om samen te programmeren. Dit lijkt in eerste instantie misschien zonde, omdat er dan iemand alleen maar mee zit te kijken, maar het kan heel veel tijdrovende bugs voorkomen. Omdat je slechts vijf uur computertijd hebt en wel vijftien manuren, is dit zeker het overwegen waard omdat je zo veel efficiënter de computer kunt gebruiken.
Het is ook belangrijk om goed de sterke en zwakke kanten van jezelf en je teamgenoten te kennen. Als de één erg goed is in het oplossen van problemen, terwijl een ander juist erg goed oplossingen kan programmeren, kun je ervoor kiezen om één iemand als programmeur aan te stellen, en de anderen als denktank. Ook is het handig om te weten wie in welk type problemen goed is. In iedere wedstrijd komen wel weer graafproblemen en dynamisch programmeren aan de orde en als dat iemands specialiteit is, kan hij die problemen het beste aanpakken.
Vaak variëren de opgaven erg in niveau en zijn ze absoluut niet op niveau gesorteerd. Er zijn vaak opgaven die door bijna iedereen opgelost worden, maar ook regelmatig opgaven die niemand goed weet aan te pakken. Het is daarom erg belangrijk de moeilijkheidsgraad goed in te schatten en de juiste opgaven aan te pakken: ze zijn namelijk evenveel punten waard. Snel inschatten of iets makkelijk of moelijk is, is zeer lastig en iets wat alleen door veel ervaring geleerd kan worden, maar één ding kan hierbij zeker helpen: door op het scorebord te kijken welke opgaven al opgelost zijn, kun je een goede indruk krijgen van wat makkelijk is! Maar alleen oplossen wat anderen al opgelost hebben, brengt je natuurlijk nooit de titel...
Het is toegestaan om zoveel boeken en programma-listings op papier mee te nemen als je wil. Het nut van boeken wordt vaak overschat: je ziet wel eens teams met dozen vol boeken aankomen, maar als je die boeken niet van buiten kent, zul je er niets aan hebben. Als je in het heetst van de strijd namelijk nog helemaal uit moet zoeken waar iets in een boek staat en hoe je dat moet implementeren, kost je dat veel kostbare tijd. Je kunt beter een paar boeken bij je hebben, waarvan je precies weet waar je wat kunt vinden.
Listings kunnen wel handig zijn. Hierbij moet je niet denken aan de oplossingen voor alle problemen die je ooit opgelost hebt, maar aan meer aan algemeen toepasbare code, voor zaken als geometrie (snijpunten uitrekenen, convex hull), bipartiet matchen en big numbers.
En dan als laatste, maar wel het allerbelangrijkste: veel oefenen. De meeste voormalige BAPC-winnaars hebben een jarenlange staat van dienst in programmeerwedstrijden en zijn zover gekomen door veel te oefenen. Hierbij moet je denken aan zowel individueel oefenen om zo goed mogelijk te worden, maar ook aan met elkaar oefenen om elkaar beter te leren kennen en goed samen te leren werken.