Afişează mesaje
|
Pagini: [1] 2 3 ... 5
|
2
|
Comunitate - feedback, proiecte si distractie / Blog / Răspuns: Subset maxim
|
: Decembrie 13, 2011, 01:43:52
|
Parcurgem sirul si pentru fiecare element x, verificam daca x - 1 si/sau x + 1 au fost intalnite anterior(cu un hash). Daca ambele au fost, atunci inseram una dintre multimi in cealalta(multimea lui X= {multimea maximala de numere consecutive intalnite inaintea lui X} U {X} ), inclusiv pe x(cu multimi disjuncte), daca doar una din valori a fost intalnita anterior il inseram pe x in acea multime.
|
|
|
3
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 065 Concert
|
: Decembrie 06, 2011, 11:01:07
|
Da. Faci o structura asa: struct compare{ bool operator < (tip a, tip b) const{ return a < b;//poti compara cum vrei aici } } iar cand sortezi apelezi asa : sort(a.begin(), a.end(), compare());
Iar daca "tip" este la randul sau o structura poti supraincarca operatorul < astfel: bool operator < (tip a) const{ return this->x < a.x;//La fel , poti sorta cum vrei } ... sort(a.begin(), a.end());//fara alti parametrii
|
|
|
4
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 243 Path
|
: August 21, 2011, 10:54:01
|
Am rezolvat problema cu 3 df-uri. 1) caut lungimea drumului maxim 2) fac dinamica: dp[ i ] numarul de drumuri de lungime maxima ce pornesc din nodul i 3) caut al k-lea drum Folosesc 52 de set-uri in loc de matrice, probabil de aici mi se trage TLE (desi 2500 muchii nu mi se par multe). Problema e ca iau si WA, desi pe testele mele merge  Any help?
|
|
|
5
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 312 Sume 2
|
: August 15, 2011, 00:42:41
|
Sa zicem ca suma fixata este S. Pentru a afla cate sume sunt mai mici ca aceasta, pentru fiecare element din vector trebuie sa vedem cate elemente din acelasi vector sunt mai mici sau egale cu S - element_curent si cate sunt strict mai mici decat S - element_curent. Sumele acestor valori sa le notam cu upper si lower. Tot ce mai trebuie facut este sa verificam daca lower < k && k <= upper.
|
|
|
9
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 916 Trenuri
|
: Martie 09, 2011, 20:11:40
|
Ce nu ar fi bine in ideea asta: Caut timpul binar(diferenta maxima minima dintre plecare si sosire) ,fac un dijkstra . Pentru fiecare nod pe care-l scot din coada(fie it o muchie care iese din nod) daca trece de codul urmator relaxez muchia si sosire[it->y]=it->sosire; if(nod==1) sosire[nod]=it->plecare; if(sosire[nod]>it->plecare) continue; if(dif < it->plecare-sosire[nod]) continue; if(cost[it->y] <= cost[nod]+it->cost) continue;
Muchiile le retin exact cum se dau in fisierul de intrare.
|
|
|
15
|
Comunitate - feedback, proiecte si distractie / Blog / Răspuns: Problema saptamanii - Interclasare
|
: August 08, 2010, 22:59:37
|
Ca sa faci heap sortul stabil trebuie sa retii si pozitiile pentru fiecare nod, deci ai o(n) memorie suplimentara. Probabil e alta idee. LE: sau bagam un stable_sort Stable_sort is an adaptive algorithm: it attempts to allocate a temporary memory buffer, and its run-time complexity depends on how much memory is available. Worst-case behavior (if no auxiliary memory is available) is N (log N)^2 comparisons, where N is last - first, and best case (if a large enough auxiliary memory buffer is available) is N (log N) sau Inplace_merge is an adaptive algorithm: it attempts to allocate a temporary memory buffer, and its run-time complexity depends on how much memory is available. Inplace_merge performs no comparisons if [first, last) is an empty range. Otherwise, worst-case behavior (if no auxiliary memory is available) is O(N log(N)), where N is last - first, and best case (if a large enough auxiliary memory buffer is available) is at most (last - first) - 1 comparisons. Implementarile sunt in headerul algorithm.
|
|
|
20
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 1071 Hawaii
|
: Iunie 21, 2010, 16:43:37
|
Frumos  Hai ca o sa ma apuc sa scriu. Intre timp am facut un fel de atan2 de mana =)) dar iau 2 WA. Creca omit vreun caz. inline bool cmp(p a,p b) { ld adx=a.first-fix.first; ld ady=a.second-fix.second; ld bdx=b.first-fix.first; ld bdy=b.second-fix.second; //1 if(adx>=0&&ady>=0) { if(bdx==0&&bdy>0) return 1; if(bdx==0&&bdy<0) return 0; if(bdx>0&&bdy==0) return 0; if(bdx<0&&bdy==0) return 0; if(bdx>0&&bdy>0) { if(adx==0) return 0; if(ady==0) return 1; return (ld)ady/adx<(ld)bdy/bdx;//1 } if(bdx<0&&bdy>0) return 1; else return 0; } //2 if(adx<=0&&ady>=0) { if(bdx<0&&bdy>0) return (ld)ady/adx<(ld)bdy/bdx;//2 else return 0;//1 3 4 } //3 if(adx<=0&&ady<=0) { if(ady==0&&adx<0) return 1;//1 2 4 if(bdx<0&&bdy<0) return (ld)ady/adx<(ld)bdy/bdx;//3 else return 1;//1 2 4 } //4 if(adx>=0&&ady<=0) { if(bdx==0&&bdy>0) return 1; if(bdx==0&&bdy<0) return 0; if(bdx>0&&bdy==0) return 1; if(bdx<0&&bdy==0) return 0; if(bdx>=0&&bdy<=0) { if(adx==0) return 1; if(ady==0) return 0; return (ld)ady/adx<(ld)bdy/bdx; } if(bdx<0&&bdy<0) return 0; else return 1; } } L.E. A mers  O sa tin minte treaba asta. MS 
|
|
|
|