Pagini recente » Diferente pentru utilizator/tudorbuhnia intre reviziile 65 si 66 | Diferente pentru planificare/sedinta-20090727 intre reviziile 39 si 28 | Diferente pentru utilizator/gavrilavlad intre reviziile 270 si 269 | Diferente pentru problema/dispozitiv intre reviziile 156 si 54 | Diferente pentru monthly-2012/runda-8/solutii/triangles intre reviziile 7 si 6
Nu exista diferente intre titluri.
Diferente intre continut:
h1(#triangles). 'Triangles':problema/triangles
h1(#triangles). 'Triangles':problema/triangles
Pentru inceput sa analizam modul in care ar trebui sa arate cele K laturi selectate.Sa le notam cu x1,x2,...,xK,unde x1<=x2<=...<=xK.Conditia necesara pentru ca 3 numere a,b,c sa reprezinte laturile unui triunghi (chiar si degenerat) este ca a+b>=c,a+c>=b si a+b>=c. Daca presupunem a<=b<=c,atunci singura conditie necesara de verificat va fi a+b>=c. Acum sa ne reintoarcem la selectia noastra de K laturi. Pentru ca selectia sa fie valida trebuie doar ca suma celor mai mici 2 laturi sa fie mai mare decat cea mai mare latura,adica x1+x2>=xK.
1.Solutia O(N*log N) care nu se incadreaza in timp ar fi sortarea sirului de N laturi + parcurgerea lui pentru verificarea conditiei de mai sus pentru fiecare subsecventa de lungime K.
2.Solutia O(N*log K) care ia 100pct este aceea de a citi primele K numere dintre cele N,a le pune intr-un min-heap (retinand si elementul maxim din el intr-o variabila) si verificarea conditiei.Daca conditia este verificata atunci afisez elementele din heap,altfel scot minimul din heap,citesc un nou numar,il introduc in heap actualizand elementul maxim din heap din variabila auxiliara si continui verificarea pana gasesc o solutie de afisat.
Nu exista diferente intre securitate.
Topicul de forum nu a fost schimbat.