Pagini recente » Diferente pentru planificare/sedinta-20080411 intre reviziile 11 si 10 | Diferente pentru monthly-2014/runda-6/solutii intre reviziile 8 si 7 | Diferente pentru planificare/sedinta-20100112 intre reviziile 21 si 20 | Diferente pentru schimbare-borland/argumentatie intre reviziile 26 si 27 | Diferente pentru blog/problema-majoritatii intre reviziile 10 si 9
Nu exista diferente intre titluri.
Diferente intre continut:
Alta idee vine de la faptul ca in sirul sortat, elementele de valori egale vor fi pe pozitii consecutive. Astfel numele presedintelui va aparea pe cel putin n/3 + 1 pozitii consecutive. Deci numele presedintelui va aparea sigur pe cel putin una din pozitiile n/3 sau 2n/3 din sir. Astfel putem folosi un algoritm de selectie pentru a gasi in O(n) elementele de pe pozitiile n/3 si 2n/3 si apoi in O(n) putem verifica care dintre acesti doi candidati au castigat.
Daca n nu depaseste un milion, putem la fiecare pas sa incrementam pentru candidatul votat x numerele a[x / 1000] si a[x % 1000]. Acum pentru a determina candidatul castigator, gasim valoarea p pentru care a[x] > n/3 + 1 si valoarea q pentru care a[y] > n/3 + 1, iar castigatorul va fi p * 1000 + q.
Daca presupunem ca n e pana in un milion am putea la fiecare pas sa incrementam pentru candidatul votat x numerele a[x / 1000] si a[x % 1000]. Acum pentru a determina candidatul castigator, gasim valoarea p pentru care a[x] > n/3 + 1 si valoarea q pentru care a[y] > n/3 + 1, iar castigatorul va fi p * 1000 + q.
O solutie ar fi sa folosim un hash map ce mapeaza numele alegatorilor la numarul de voturi castigate. Solutia aceasta este eficienta dar foloseste O(n) memorie suplimentara pentru structura de date.
Nu exista diferente intre securitate.
Topicul de forum nu a fost schimbat.