Acest site este aici din ratiuni istorice (sa ramana site-ul ptr eternitate :) ).
Baza de date ca si site-ul de la adresa reala au fost pierdute. Vom sa recuperam cate ceva, dar pana una alta, asta este.
Login: Parola:
Program
ONI.Live!
Poze
Revista
Regulament
Ghidul elevului



Olimpiada Nationala de Informatica
- liceu -
ghidul elevului

Evaluarea se realizeaza cu un sistem automat de evaluare (un sistem de programe care compileaza sursele voastre, executa programul vostru pentru fiecare set de date de intrare pregatit de comisie pentru evaluare, verifica daca datele de iesire furnizate de programul vostru sunt corecte, acorda un punctaj pentru fiecare set de date, genereaza borderouri individuale de evaluare si clasamente pentru fiecare proba de concurs).

Sistemul de evaluare nu este tolerant, el impune respectarea cu rigurozitate a cerintelor specificate în regulament si în enuntul problemei.

Recomandari generale

  1. În prima jumatate de ora cititi cu mare atentie enunturile tuturor problemelor. Un enunt trebuie citit cu atentie pâna la sfârsit. Descrierea datelor de intrare si de iesire clarifica mult enuntul problemei. De asemenea este bine sa verificati "de mâna" exemplele date în enunt.
  2. Orice neclaritate sau dubiu ati avea, adresati în scris întrebari comisiei, în limita timpului acordat pentru aceasta! Formulati întrebarile astfel încât sa puteti primi un raspuns util (DA sau NU). Evitati întrebarile inutile ("Este alba sau neagra?", "Nu înteleg ce înseamna X", etc) sau întrebarile negative (de obicei conduc la neîntelegeri).
  3. Restrictiile precizate în enunt sunt deosebit de importante. Declararea datelor din programul vostru trebuie sa fie în concordanta cu aceste restrictii. Restrictiile, corelate cu timpul maxim de executie pe fiecare test, sunt indicatii referitoare la complexitatea algoritmilor de rezolvare solicitata de comisie pentru punctaj maxim. Ceea ce nu înseamna ca un program corect având complexitate mai mare va lua 0 puncte. Testele de evaluare sunt diferite ca structura si dimensiune (în general în teste se trateaza cazurile particulare, exista teste de dimensiuni mici, medii si mari).
  4. Cititi datele de intrare din fisierul de intrare si afisati rezultatele în fisierul de iesire specificat în enunt. Respectati cu strictete numele si extensia fisierului (scrise cu litere mici) si formatul datelor specificat în enunt. Fiti atenti inclusiv la caracterele albe (spatii, tab-uri sau marcaje de sfârsit de linie). Daca nu cititi în formatul specificat, veti avea erori la citire. Daca nu scrieti în formatul cerut, programul de evaluare al comisiei va detecta erorile din structura fisierului de iesire si veti obtine 0 puncte. NU precizati cumva calea catre fisierele de intrae/iesire (fiti convinsi ca fisierele se vor afla în directorul curent, altul decât cel pe care ati lucrat voi).
  5. Orice linie se termina obligatoriu cu un marcaj de sfârsit de linie (Enter).
  6. Datele de intrare utilizate la evaluare sunt corecte (respecta restrictiile specificate în enunt).
  7. Nu uitati sa închideti fisierul de iesire! Altfel este extrem de probabil ca ultimele date scrise sa ramâna în buffer, fara sa fie scrise si în fisier.
  8. Creati directorul denumit cu ID-ul vostru. Rezervati ultimele 5 minute pentru salvarea surselor corecte si stergerea tuturor celorlalte fisiere din directorul vostru. Nu va grabiti la salvare! Verificati de x ori (x>3)! Mare atentie la numele fisierelor! Trebuie sa coincida cu numele specificate în enunt (scrise cu litere mici!).
  9. Chiar daca credeti ca ati terminat tot, nu plecati!!! Testati programele proprii pe cât mai multe date de test (preferabil si de dimensiuni mari, în conformitate cu restrictiile din enuntul problemei).
  10. Nu afisati nimic pe ecran si (mai ales!!!) NU uitati în programe instructiuni de genul readln; readkey; sau getch(); Daca asteptati (inutil) o tasta, cu siguranta veti depasi timpul de executie precizat în enunt! Daca depasiti timpul de executie veti lua 0 puncte.
  11. Nu utilizati variabile neinitializate!
  12. Pentru programatorii Pascal utilizarea unit-ului CRT este interzisa (si de altfel inutila, din moment ce nu folositi ecranul). Daca insistati totusi sa utilizati acest unit, veti primi eroare la executie (Division by 0), deci 0 puncte. Programatorii în C nu vor utiliza conio.h.
  13. Salvati frecvent! Calculatoarele se pot bloca, poate aparea o pana de curent, etc.

Windows versus Linux

La ONI 2003 veti fi evaluati atât sub Linux, cât si sub Windows. Daca doriti sa beneficiati de avantajele evaluarii sub Linux trebuie sa tineti cont de câteva particularitati ale lucrului sub Linux.

  1. În primul rând trebuie sa fiti atenti la numele fisierelor (Linux este case-sensitive!). Conventia generala este: numele tuturor fisierelor care intervin în problema se vor scrie cu litere mici.
  2. Evaluatorul testeaza daca programul nu returneaza un cod de eroare. Programatorii C si C++ trebuie sa fie atenti ca tipul functiei main() sa fie int si la sfârsit sa returneze valoarea 0 (return 0; sau exit(0);). Pentru programatorii Pascal nu exista aceasta problema, deoarece în caz de terminare "normala" a programului codul returnat este 0. Daca iesiti dintr-un program în mod fortat (cu subprograme de tip exit), returnati valoarea 0, daca doriti sa fie considerat un mod de terminare "normal".
  3. În Linux, daca utilizati pointeri care acceseaza zone de memorie în afara zonelor de memorie alocate programul vostru se va termina cu un mesaj de eroare (Segmentation Fault). Comportamentul unui astfel de program rulat sub Windows este impredictibil.
  4. Daca utilizati tablouri si folositi indici care sa depaseasca limitele declarate pentru tablou, programul vostru se va termina de asemenea cu un mesaj de eroare (Segmentation Fault). Comportamentul unui astfel de program rulat sub Windows este greu predictibil.
  5. Mediile de lucru sub Linux sunt foarte stabile.
  6. Timpul de executie a aplicatiilor sub Linux este mai mic decât sub Windows.

Free Pascal versus Borland Pascal

1. Memorie disponibila

FreePascal Borland Pascal
Puteti aloca oricâta memorie doriti (în limita memoriei RAM disponibile si a restrictiilor specificate în problema). Daca în problema nu exista alte restrictii, în mod uzual se utilizeaza un o zona de date de 15 Mb si stiva de 1 Mb. Pentru datele alocate static aveti la dispozitie 64 KB. Pentru stiva maxim 65520 B, iar pentru heap maxim 655360 B.

2. Tipuri de date

FreePascal Borland Pascal
Datele de tipuri reale se aloca pe 8 B, exceptând tipul extended care se aloca pe 10B si tipul single care se aloca pe 4B.

Datele de tip real se aloca pe 6 B.
Pentru a utiliza date de tipuri double, extended, comp trebuie utilizata directiva de compilare {$N+}
Datele de tip comp se aloca pe 8B.
Datele de tip double se aloca pe 8B.
Datele de tip extended se aloca pe 10B.
Datele de tip single se aloca pe 4B.

Exista tipul întreg int64 pentru lucrul cu numere întregi pe 64 de biti. -

3. Optiuni de compilare

Cei obisnuiti sa introduca la începutul surselor lor Pascal toate optiunile de compilare cu CTRL/O CTRL/O vor primi urmatoarele avertismente la compilare:
$A, $B, $N, $O - optiune inexistenta în FP
$F, $G - optiuni ignorate
$S - controlul stivei este global în Linux.

GNU versus Borland

1. Memorie disponibila

gcc, g++ Borland C
Puteti aloca oricâta memorie doriti (în limita memoriei RAM disponibile si a restrictiilor specificate în problema). Daca în problema nu exista alte restrictii, în mod uzual se utilizeaza un o zona de date de 15 Mb si stiva de 1 Mb.

Pentru datele alocate static aveti la dispozitie 64 KB. Pentru stiva maxim 65520 B, iar pentru heap maxim 655360 B.

Gestiunea memoriei este impecabila. Exista situatii frecvente în care desi exista memorie disponibila, nu se face corect alocarea dinamica a memoriei.

2. Memorie disponibila

gcc, g++ Borland C
Datele de tip int se aloca pe 4B, la fel si datele de tip long int.
Datele de tip short int se aloca pe 2B.
Exista tipul long long care se aloca pe 8B.

Datele de tip int se aloca pe 2B, la fel datele de tip short int. Datele de tip long int se aloca pe 4B.

Erorile în lucrul cu numere reale sunt în limitele admise teoretic. La lucrul cu numere reale apar erori "grosolane".

3. Fisiere antet disponibile

Nu toate fisierele antet disponibile în mediul Borland sunt disponibile si în gcc/g++. Lista de fisiere antet disponibile este mare. Putem preciza ca în gcc puteti conta de exemplu pe stdio.h, stdlib.h, string.h, math.h, limits.h, time.h, assert.h, iar în g++ si pe iomanip.h, iostream.h, ostream.h, fstream.h.

Nici functiile declarate în aceste fisiere antet nu coincid 100%.

contact organizatori : emil@lufo.ro realizatori web : vivi, irina