•domino
|
 |
« : Septembrie 07, 2005, 00:31:06 » |
|
Aici puteţi discuta despre problema Granita.
|
|
|
Memorat
|
|
|
|
•MarcvsHdr
Strain
Karma: 1
Deconectat
Mesaje: 44
|
 |
« Răspunde #1 : Martie 30, 2007, 19:16:16 » |
|
Am rezolvat problema asta in O(N*logN) si iese din timp pe 7 teste. Am vzut ca a fost data la .campion 2003 si am cautat-o acolo. Solutia oficiala de acolo e tot O(N*logN)  . DAR, limita de timp era acolo 0.2 sec. Intr-adevar, in 0.2 sec merge. E o greseala pe site cand s-a pus limita de 0.1? Daca nu, a rezolvat cineva si in O(N)??
|
|
|
Memorat
|
|
|
|
•m_dersidan
Strain
Karma: 6
Deconectat
Mesaje: 16
|
 |
« Răspunde #2 : Martie 30, 2007, 19:36:29 » |
|
Rezolvarea este in O(N log N), pentru ca e nevioe de o sortare, si intra in timp.
|
|
|
Memorat
|
|
|
|
•MarcvsHdr
Strain
Karma: 1
Deconectat
Mesaje: 44
|
 |
« Răspunde #3 : Martie 30, 2007, 20:28:16 » |
|
Am trimis DOAR citirea si sortarea, ca sa vad daca intra in timp, de curiozitate. Si nu intra nici macar citirea + sortarea. La sortare am folosit quick. Citirea o fac cu fscanf. (later edit) Gata, s-a rezolvat. Am inlocuit Quick Sort cu un Heap Sort. Se pare ca totusi exemplele erau bine alese ca sa nu intre Quick in timp. 
|
|
« Ultima modificare: Martie 30, 2007, 20:57:46 de către S A »
|
Memorat
|
|
|
|
•m_dersidan
Strain
Karma: 6
Deconectat
Mesaje: 16
|
 |
« Răspunde #4 : Martie 31, 2007, 11:22:32 » |
|
Intra si quick sort in timp, trebuia doar sa il faci random.
|
|
|
Memorat
|
|
|
|
•crus
Strain
Karma: 3
Deconectat
Mesaje: 44
|
 |
« Răspunde #5 : Martie 31, 2007, 12:08:53 » |
|
daca nu intra quick...incearca merge...
|
|
|
Memorat
|
|
|
|
•Florian
|
 |
« Răspunde #6 : Mai 01, 2007, 21:05:12 » |
|
Ei bine...eu iau 80 de puncte cu bubble sort....Am trimis o sursa cu quicksort si luam 0, cu TLE pe toate...Este ciudat cum bubble este mai rapid ca quick..,.[ps: nu inteleg ce e ala quicksort random!  Poate ma poate ajuta cineva, k vreau sa invat si eu, va rog! ]
|
|
|
Memorat
|
|
|
|
•stef2n
|
 |
« Răspunde #7 : Mai 01, 2007, 22:49:00 » |
|
La quicksort-ul normal, pentru un interval [A,B] afli pozitia pe care trebuie sa stea pivotul A astfel incat toate elementele din stanga sunt mai mici, iar toate elementele din dreapta sunt mai mari ca el. La quicksort-ul aleator, in loc de A folosesti ca pivot alt element din intervalul [A,B], pivot pe care il generezi random 
|
|
|
Memorat
|
Exista 10 categorii de oameni: cei care inteleg sistemul binar si cei care nu il inteleg.
|
|
|
•CezarMocan
|
 |
« Răspunde #8 : Septembrie 07, 2007, 11:11:11 » |
|
Sau se poate sa iti randomizezi un pic valorile inainte de sortare... eu asa am facut si am luat 100.
|
|
|
Memorat
|
|
|
|
•cos_min
|
 |
« Răspunde #9 : Septembrie 07, 2007, 11:17:39 » |
|
Cel mai usor ii cu un set 
|
|
|
Memorat
|
vid...
|
|
|
•crus
Strain
Karma: 3
Deconectat
Mesaje: 44
|
 |
« Răspunde #10 : Septembrie 07, 2007, 22:02:13 » |
|
poate pe tipurile astea de teste...quiksort scoate un timp mai prost...aproape de N^2...incearca merge sort...ala sigur intra
|
|
|
Memorat
|
|
|
|
•gabitzish1
|
 |
« Răspunde #11 : Septembrie 07, 2007, 23:23:47 » |
|
merge si quicksort.. mie mi'a intrat la problema asta..cel mai mare timp a fost 40ms... deci e destul de bine.
|
|
« Ultima modificare: Septembrie 07, 2007, 23:26:02 de către Bitis Gabriel »
|
Memorat
|
|
|
|
•ciprianf
|
 |
« Răspunde #12 : Februarie 19, 2008, 08:15:42 » |
|
Salut...am vazut problemele alea cu qsort si asa ca m-am gandit sa va postez o sortare f f buna pe care eu o stiu sub numele de sheel( la aceasta probl cel mai mare timp a fost de 20 ms), fie v vectorul nostru care contine n numere, numerotate de la 1 la n: inj=n; while(inj>1){ inj/=2; do{ gata=1; for(i=1;i<=n-inj;i++) if(v[i]>v[i+inj]){ aux=v[i]; v[i]=v[i+inj]; v[i+inj]=aux; gata=0; } } while(!gata); }
sper sa fie de folos cei care nu au facut inca problema
|
|
|
Memorat
|
|
|
|
•wefgef
|
 |
« Răspunde #13 : Februarie 19, 2008, 08:33:12 » |
|
Algoritmul postat de tine (shell sort) este destul de ineficient pentru seturi mari de date, insa pentru un numar mai mic de elemente este unul din cei mai rapizi algoritmi cunoscuti. In plus, nu are nevoie de memorie suplimentara.
|
|
|
Memorat
|
omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
|
|
|
•ciprianf
|
 |
« Răspunde #14 : Februarie 19, 2008, 08:41:02 » |
|
Si cam de la cat incep "seturile mari de date?" si pt aceste seturi ce metoda folosesc? qsort?
|
|
|
Memorat
|
|
|
|
•skyel
|
 |
« Răspunde #15 : Februarie 19, 2008, 13:50:59 » |
|
Depinde foarte mult si de cum e aranjat sirul initial. Pentru ca exista seturi de date pe care shell sort poate ajunge O(N^2). Pentru mai multe info poti sa cauti pe wikipedia....cred
|
|
|
Memorat
|
|
|
|
•wefgef
|
 |
« Răspunde #16 : Februarie 19, 2008, 15:02:24 » |
|
In general e bine sa folosesti quicksort pentru siruri mai mare de 100-200 de elemente. In C++ poti sa folosesti sort-ul din STL.
|
|
|
Memorat
|
omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
|
|
|
•toni2007
|
 |
« Răspunde #17 : Februarie 23, 2008, 14:17:19 » |
|
In general e bine sa folosesti quicksort pentru siruri mai mare de 100-200 de elemente. In C++ poti sa folosesti sort-ul din STL.
cum faci sort pentru structuri? se poate face?
|
|
|
Memorat
|
|
|
|
•wefgef
|
 |
« Răspunde #18 : Februarie 23, 2008, 14:29:17 » |
|
Da, dar trebuie sa iti faci propria functie de comparare. typedef struct Fractie { int a, b; } Fractie;
inline int cmp(Fractie A, Fractie B) { return A.a * B.b < A.b * B.a; }
int N; Fractie V[MAXN];
int main() { Citeste(V, N); sort(V, V+N, cmp); }
Am schitat codul pentru un program care citeste in vectorul V N fractii pe pozitiile 0... N-1 si le sorteaza crescator.
|
|
|
Memorat
|
omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
|
|
|
•andrei.finaru
Strain
Karma: 8
Deconectat
Mesaje: 26
|
 |
« Răspunde #19 : Martie 08, 2010, 19:56:16 » |
|
La problema asta se intampla ceva ciudat: am ok pe primele 3 teste si pe ultimul (care, judecand dupa memorie, e cel mai mare) si pe restul TLE. Cum pot sa ies din timp daca pe cel mai mare test imi intra, nu stiu. Am sortat structura cu mergesort si apoi am verificat cu : for(j=2;j<=n;j++) {q=1; while(q<j) if(a[q].s>a[j].s) {c++; q=j;} else q++;} daca dispozitivul e redundant. Daca e un caz poate mai special va rog sa-mi dati un test sa ma prind si eu unde pica. Multumesc anticipat.
|
|
|
Memorat
|
|
|
|
•Florian
|
 |
« Răspunde #20 : Martie 08, 2010, 21:13:04 » |
|
Nu e bine cum verifici. Complexitatea ta e patratica. Trebuie un pic mai eficient. Incearca sa renunti la while-ul ala. 
|
|
|
Memorat
|
|
|
|
•andrei.finaru
Strain
Karma: 8
Deconectat
Mesaje: 26
|
 |
« Răspunde #21 : Martie 09, 2010, 11:17:15 » |
|
Mersi mult! Am luat suta:D:D:D 
|
|
|
Memorat
|
|
|
|
•idomiralin
Strain
Karma: 0
Deconectat
Mesaje: 15
|
 |
« Răspunde #22 : Aprilie 13, 2010, 23:19:52 » |
|
Eu am facut quicksort si iau numa 20 Cod: int quick(int st, int dr) { int i,j,piv,aux,aux1; i = st; j = dr; piv = a[(st + dr) / 2]; while (i <= j) { while (a[ i ] < piv) ++i; while (a[ j ] > piv) --j; if (i <= j) { aux = a[ i ]; a[ i ] = a[ j ]; a[ j ] = aux; aux = b[ i ]; b[ i ] = b[ j ]; b[ j ] = aux; ++i;--j;} } if (st < j) quick(st,j); if (i < dr) quick(i,dr); } Ce as putea imbunatati la quicksortu asta?(daca ma poate ajuta cineva) Editat de moderator: Foloseste tagurile [ code ] [ /code ] cand postezi cod.
|
|
« Ultima modificare: Aprilie 14, 2010, 07:55:42 de către Gabriel Bitis »
|
Memorat
|
|
|
|
•valentin.harsan
Strain
Karma: 33
Deconectat
Mesaje: 41
|
 |
« Răspunde #23 : Iunie 21, 2011, 15:06:28 » |
|
cred ca trebuia sa fie Aj<=Ai si Bi<=Bj nu Aj<Ai si Bi<Bj
|
|
|
Memorat
|
|
|
|
•Smaug-
Strain
Karma: 5
Deconectat
Mesaje: 11
|
 |
« Răspunde #24 : Iulie 08, 2011, 15:15:55 » |
|
|
|
« Ultima modificare: Iulie 08, 2011, 16:04:05 de către Andrei C. »
|
Memorat
|
|
|
|
|