Allgemeine Herangehensweise an Programming Contest Probleme

  • Aufgabenstellung lesen (nee, wirklich!)
  • Schwierigkeit einschätzen (1 - 10. 1 ist Easy, 10 ist verdammt schwer)
  • Entscheiden, ob man die Aufgabe bearbeiten möchte.
    • Bei ja, sich auf dem Sign-Up-Sheet für die Aufgabe eintragen. Weiter mit dem nächsten Punkt.
    • Bei nein, nächste Aufgabe ansehen. Zurück zum Anfang.
  • Eingabe-Daten in Pakete zerlegen, die man vollständig einlesen muss, bevor man weitermachen kann. Hier sollte man v.a. darauf achten nicht unnötig Daten zwischenzuspeichern, wenn man sie auch direkt on-the-fly in eine Lösung verwandeln hätte können.
Beispiel: Summe von n Zahlen. Eingabe kommt in Sets von n+1 Zahlen. Die erste Zahl ist n, dann folgen n+1 Zahlen, auszugeben ist die Summe.

Eingabe zerlegen:
  • Sets
    • Zahl n
    • n Zahlen -> Brauchen wir nicht zu speichern, können wir on-the-fly zur Lösung machen:
do { // Do Schleife bearbeitet Sets.
  int n = (int)in();
  if (n==0)
    exit();
  int sum = 0;
  for (int i = 0; i < n; i++){
    sum += (int)in(); // Es hätte keinen Sinn gemacht die Daten hier zu speichern.
  }
} while (true);
  • Pakete bearbeiten
  • Lösung ausgeben.

Comments

 
Topic revision: r1 - 09 Dec 2005, oezbekPCPOOL.MI.FU-BERLIN.DE
 
  • Printable version of this topic (p) Printable version of this topic (p)