This shows you the differences between two versions of the page.
sd-ca:teme:tema1 [2019/02/24 15:51] george.popescu0309 |
sd-ca:teme:tema1 [2019/04/06 19:22] (current) george.popescu0309 |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | <hidden> | ||
====Tema1==== | ====Tema1==== | ||
Line 5: | Line 4: | ||
* [[mailto:andistroie@gmail.com | Alexandru Mihai Stroie]] | * [[mailto:andistroie@gmail.com | Alexandru Mihai Stroie]] | ||
* [[mailto:george.apopescu97@gmail.com | George Popescu]] | * [[mailto:george.apopescu97@gmail.com | George Popescu]] | ||
- | * [[mailto:@gmail.com | Tiberiu Lepadatu]] | + | * Data publicării: 11.03.2019 |
- | * Data publicării: 14 martie 2018 | + | * Deadline: **05.04.2019 ora 23:55** |
- | * Deadline: 5 aprilie 2018 ora 02:55 | + | |
+ | === Modificări și actualizări === | ||
+ | * **18 martie** | ||
+ | * modificare nume fisiere intrare/iesire in races.in/races.out | ||
+ | * update checker | ||
+ | |||
+ | <note warning>**Atenite!** O tema care nu compileaza va primi 0 puncte.</note> | ||
=== Obiective === | === Obiective === | ||
Line 14: | Line 19: | ||
* Implementarea și utilizarea structurilor de date listă, skiplist (generice). | * Implementarea și utilizarea structurilor de date listă, skiplist (generice). | ||
- | <note warning>Orice tema ce nu va folosi skipList va primi maxim 60% din nota.</note> | + | <note warning>Orice tema ce nu va folosi skipList va primi maxim 5/8 puncte pe test (maxim nota 7/10 pe tema). </note> |
Line 22: | Line 27: | ||
| | ||
=== Desfasurarea campionatului === | === Desfasurarea campionatului === | ||
- | + | ||
In campionat vor fi m curse. Datele despre o cursa vor fi date ca un sir de n numere: t_1, t_2, …, t_n, unde t_i este timpul pe care l-a avut concurentul cu id-ul i in acea cursa. \\ | In campionat vor fi m curse. Datele despre o cursa vor fi date ca un sir de n numere: t_1, t_2, …, t_n, unde t_i este timpul pe care l-a avut concurentul cu id-ul i in acea cursa. \\ | ||
Daca un concurent are t_i egal cu 0, asta inseamna ca el nu a participat la acea cursa (nici nu pierde, dar nici nu primeste puncte).\\ | Daca un concurent are t_i egal cu 0, asta inseamna ca el nu a participat la acea cursa (nici nu pierde, dar nici nu primeste puncte).\\ | ||
Fie P numarul de participanti ai unei curse. Acestia vor primi punctaje din intervalul [P/2, -P/2] in functie de pozitia pe care au ocupat-o in clasament astfel: primul (cel cu timpul minim, diferit de 0) va primi P/2 puncte, cel de pe locul al doilea va primi P/2 - 1 … penultimul -P/2 + 1, iar ultimul -P/2 puncte.\\ | Fie P numarul de participanti ai unei curse. Acestia vor primi punctaje din intervalul [P/2, -P/2] in functie de pozitia pe care au ocupat-o in clasament astfel: primul (cel cu timpul minim, diferit de 0) va primi P/2 puncte, cel de pe locul al doilea va primi P/2 - 1 … penultimul -P/2 + 1, iar ultimul -P/2 puncte.\\ | ||
+ | |||
+ | <note important>Inainte de inceperea campionatului participantii vor fi asezati in clasament in ordinea crescatoare a id-urilor.</note> | ||
Exemplu pentru o cursa.\\ | Exemplu pentru o cursa.\\ | ||
Line 51: | Line 58: | ||
</note> | </note> | ||
- | <note important>In cazul in care 2 concurenti au acelasi timp, vor fi departajati dupa id (cel cu id mai mic este in fata celui cu id mai mare).</note> | + | <note important>In cazul in care 2 concurenti au acelasi timp, vor fi departajati dupa pozitia ocupata in clasamentul anterior cursei actuale. |
+ | Clasamentul se va stabili dupa fiecare cursa, nu doar la operatii de print.</note> | ||
=== Operatii === | === Operatii === | ||
Line 64: | Line 72: | ||
* Creati un program care sa il ajute pe Piciorus sa isi urmareasca favoritii din campionatul descris mai sus. | * Creati un program care sa il ajute pe Piciorus sa isi urmareasca favoritii din campionatul descris mai sus. | ||
- | |||
=== Input === | === Input === | ||
Line 72: | Line 79: | ||
* Sirul “print”. | * Sirul “print”. | ||
* n numere naturale separate printr-un spatiu, reprezentand timpul unui concurent intr-o cursa. | * n numere naturale separate printr-un spatiu, reprezentand timpul unui concurent intr-o cursa. | ||
+ | * Citirea se va face din fisierul races.in | ||
<note tip>Se garanteaza ca vor fi fix m curse si fix k print-uri.</note> | <note tip>Se garanteaza ca vor fi fix m curse si fix k print-uri.</note> | ||
Line 78: | Line 86: | ||
=== Output === | === Output === | ||
- | * In fisierul de output se vor gasi n*k linii ( k clasamente), fiecare linie continand 3 numere separate printr-un spatiu: ID-ul, Nr. de puncte acumulate de la inceputul campionatului si Diferenta de nivel din clasament fata de print-ul trecut. | + | * In fisierul de output se vor gasi n*(k + 1) linii (k clasamente, dupa fiecare clasament se va afisa o linie goala), fiecare linie continand 3 numere separate printr-un spatiu: ID-ul, Nr. de puncte acumulate de la inceputul campionatului si Diferenta de nivel din clasament fata de print-ul trecut. |
+ | * Afisarea se va face in fisierul races.out | ||
<note tip>Pentru primul print Diferenta de nivel va fi 0 pentru toti participantii.</note> | <note tip>Pentru primul print Diferenta de nivel va fi 0 pentru toti participantii.</note> | ||
Line 112: | Line 121: | ||
=== Restrictii si precizari === | === Restrictii si precizari === | ||
- | * TO DO | ||
<note warning>**Atenție!** Structurile de date trebuie sa fie implementate generic.</note> | <note warning>**Atenție!** Structurile de date trebuie sa fie implementate generic.</note> | ||
+ | * 0 < n < 1000 | ||
=== Teste publice === | === Teste publice === | ||
- | {{|Checker Tema1}} | + | |
+ | {{:sd-ca:teme:checker-tema1-2019-v3.zip|}} | ||
Temele vor trebui trimise pe [[https://elf.cs.pub.ro/vmchecker/ui/#SD|vmchecker]]. | Temele vor trebui trimise pe [[https://elf.cs.pub.ro/vmchecker/ui/#SD|vmchecker]]. | ||
Line 152: | Line 161: | ||
=== Tutorial Skip List === | === Tutorial Skip List === | ||
- | * TO DO | + | Despre structura de date: |
- | </hidden> | + | |
+ | SkipList este o structura de date care poate sa faca operatia de cautare in O(log n) si insertia ordonata in O(log n). Deci se aproprie de caracteristiciile vectorului in ceea ce priveste cautarea, pastrand totusi avantajele unei liste(inserarea elementelor in O(1)).\\ | ||
+ | |||
+ | ^ Algorithm ^ Average ^ Worst case ^ | ||
+ | | Space | O(n) | O(n log n) | | ||
+ | | Search | O(log n) | O(n) | | ||
+ | | Insert | O(log n) | O(n) | | ||
+ | | Delete | O(log n) | O(n) | | ||
+ | \\ | ||
+ | **Principalele operatii:** | ||
+ | \\ | ||
+ | <code> | ||
+ | **Search**(key) | ||
+ | p = top-left node in S | ||
+ | while (p.below != null) do //Scan down | ||
+ | p = p.below | ||
+ | while (key >= p.next) do //Scan forward | ||
+ | p = p.next | ||
+ | return p | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | **Insert**(key) | ||
+ | p = Search(key) | ||
+ | q = null | ||
+ | i = 1 | ||
+ | repeat | ||
+ | i = i + 1 //Height of tower for new element | ||
+ | if i >= h | ||
+ | h = h + 1 | ||
+ | createNewLevel() //Creates new linked list level | ||
+ | while (p.above == null) | ||
+ | p = p.prev //Scan backwards until you can go up | ||
+ | p = p.above | ||
+ | q = insertAfter(key, p) //Insert our key after position p | ||
+ | until CoinFlip() == 'Tails' | ||
+ | n = n + 1 | ||
+ | return q | ||
+ | </code> | ||
+ | |||
+ | <code> | ||
+ | **Delete**(key) | ||
+ | Search for all positions p_0, ..., p_i where key exists | ||
+ | if none are found | ||
+ | return | ||
+ | Delete all positions p_0, ..., p_i | ||
+ | Remove all empty layers of skip list | ||
+ | </code> | ||
+ | {{ :sd-ca:teme:screenshot_from_2019-03-04_22-06-08.png?nolink&700 |}} | ||
+ | |||
+ | <note tip>Linkuri utile:\\ | ||
+ | '' | ||
+ | https://people.ok.ubc.ca/ylucet/DS/SkipList.html\\ | ||
+ | |||
+ | https://www.ics.uci.edu/~pattis/ICS-23/lectures/notes/Skip%20Lists.pdf\\ | ||
+ | |||
+ | http://ticki.github.io/blog/skip-lists-done-right/\\ | ||
+ | |||
+ | https://www.cs.cmu.edu/~ckingsf/bioinfo-lectures/skiplists.pdf\\ | ||
+ | |||
+ | https://www.youtube.com/watch?v=2g9OSRKJuzM\\ | ||
+ | |||
+ | https://www.youtube.com/watch?v=7GWXfL6T3fM\\ | ||
+ | '' | ||
+ | </note> |