Afişează mesaje
|
Pagini: 1 [2] 3 4 ... 20
|
27
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: HELP
|
: Aprilie 22, 2008, 17:08:48
|
daniel, parerea mea este ca atunci cand vrei sa initializezi un vector cu o valoare, sa faci cu for. este o metoda sigura si clara. nu o sa conteze prea tare (la timp ma refer) daca faci cu memset, int A[]={0}, sau cu for. in cel mai rau caz (daca esti fff ghinionist) o sa-ti iasa din timp maxim un test, din cauza initializarii unui vector.
|
|
|
31
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 170 Subsir 2
|
: Aprilie 21, 2008, 12:06:08
|
nu cred ca e buna conditia asta if(v[j]>=v[i] && l[j]<l[i] && v[j]<min) scoate l[ j ] < l[ i ]. daca se indeplineste conditia (fara l), reactualizei min si apoi vezi daca solutia curenta iti imbunatasete solutia calculata anterior, adica: if (l[j]+1 < l[i]) { l[i] = l[j]+1; p[i] = j; } ai grija ca in caz de egalitate reactualizezi p[ i ] cu minimul dintre val lui si j.
|
|
|
33
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 019 Pavare
|
: Aprilie 21, 2008, 11:50:46
|
varule, ca sa ii pice tot programul trebuie sa ii pice ambele functii. Din ce am inteles eu a aplicat 2 greedyuri si ia solutia cea mai convenabila dintre cele 2. O abordare destul de buna uneori poate chiar mai bine decat sa bagi solutia oficiala si sa o busesti adevarat varule, dar pe al doilea test nu intra in comp1(). [...] Functia compl1() cauta doua randuri consecutive libere (complet). [...]
|
|
|
34
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 019 Pavare
|
: Aprilie 20, 2008, 21:42:17
|
daca am inteles bine ce face comp1(), atunci ar trebui sa pice testul (patratele marcate cu 1 sunt patratele blocate): 0000 22222 0000 => 22222 1100 1122 1100 1122
oricum, daca pe ala nu pica prima functie, sigur pe testul asta pica comp2(), deci iti pica tot programul:
10001 10221 00001 22221 00001 => 22111 00001 00221 10001 10221
|
|
|
38
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Graf
|
: Aprilie 20, 2008, 18:23:32
|
Poti rezolva problema prin programare dinamica: D[ i ][ j ] = distanta minima de la nodul de start panala nodul i trecand prin exact j noduri. Initial D[ sursa ][1] = 0, iar pentru o stare (i,j) deja calculata vei trece intr-o stare (i',j+1) unde i' este un vecin al lui i.
|
|
|
44
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: 009 Algoritmul lui Dijkstra
|
: Aprilie 18, 2008, 19:20:25
|
Algoritmul lui Dijkstra este un algoritm de tip greedy. In randurile de mai jos D[ i ] reprezinta distanta de la nodul sursa (S), iar C[ i ][ j ] = costul muchiei (i,j). Initial D[ i ] = INF (pt i dif de S) . pasul 1: cautam nodul i pentru care D[ i ] este minim. pasul 2: parcurgem toti vecinii lui i si reactualizam distanta pentru un vecin j, daca D[ j ] este mai mare decat D[ i ]+C[ i ][ j ]. reluam de la pasul 1. pasul 1 se poate face in O(n) (parcurgand vectorul D si luand minimul), iar complexitatea finala va fi O(N*N+M). Daca vrei sa faci acest pas mai repede, de fiecare data cand reactualizezi distanta pentru un vecin o introduci intr-un heap (in O(log N)) si vei face pasul 1 in O(1), iar complexitatea finala va fi O(NlogN + M). (prin log x se intelege log2 x) Iti sugerez sa citest ceea ce am zis mai sus uitandu-te, in paralel, pe sursa lui Filip: http://infoarena.ro/job_detail/153886?action=view-source
|
|
|
45
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 170 Subsir 2
|
: Aprilie 18, 2008, 18:59:00
|
Spunem ca un subsir B=(bi1,bi2...biN) este crescator maximal daca ai1 ≤ ai2 ≤ ... ≤ aiK si nu exista nici un x astfel incat: sa existe j < K, ij < x < ij+1 si aij ≤ ax ≤ aij+1, sau 1 ≤ x < i1 si ax ≤ ai1 sau iK < x ≤ N si aiK <= a pentru exemplul lui wefgef: 8 6 3 9 10 3 2 5 1 3 7 5 2 8 4 10. subsiruri crescatoare care nu sunt maximale sunt 8 6 3 9 10 3 2 5 1 3 7 5 2 8 4 10 (se mai poate extinde cu 9 si cu ultimul 10) 8 6 3 9 10 3 2 5 1 3 7 5 2 8 4 10 (se mai poate extinde cu ultimul 10) 8 6 3 9 10 3 2 5 1 3 7 5 2 8 4 10 (se mai poate extinde cu 7, 8, 10, sau cu 5, 8, 10). daca din exemplele de mai sus consideram intr-o secventa si numerele boldite si numerele subliniate, vei avea subsiruri crescatoare maximale.
|
|
|
|