Afişează mesaje
Pagini: [1] 2 3 ... 7
1  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Am stat 3 ore la problema asta si tot nu imi dau seama. : Iulie 17, 2014, 21:45:34
Consideram matricea:

1
1 2
1 2 3
1 2 3 4

Sa vedem cum se traduce gasirea valorii k din sir cu gasirea unui element (kx, ky) in matrice.

In primul rand, matricea de mai sus are 1 + 2 + 3 + 4 = 4*5/2 = 10 elemente.

Primele i linii au, in total i*(i + 1)/2 elemente.
Linia i are i elemente 1 2 ... i.

Al k-lea element este pe cea mai mica linie kx astfel incat kx*(kx + 1)/2 >= k

=> kx^2 + kx - 2k >= 0

kx^2 + kx - 2k = 0
delta = 1 - 4*(1 * (-2k)) = 1+8k > 0
kx = [-1 +/- sqrt(1 + 8k)] / 2

Varianta cu - evident nu convine, deoarece kx nu poate fi negativ

=> kx = [-1 + sqrt(1 + 8k)] / 2
=> kx = Ecuatie(1, 1, -2k)

De exemplu, pentru al cincilea element:

kx^2 + kx - 10 = 0
delta = 1 + 40 = 41

kx = [-1 + sqrt(41)] / 2 = 3 (rotunjit in sus)

Pana la linia 3 sunt 3 elemente, deci ky = 5 - 3 = 2

Al doilea element de pe linia 3 este 2.
2  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 898 Suman : August 18, 2009, 17:32:55
CMMMC(a, b) = (a*b)/CMMDC(a, b)

CMMMC(a, b, c) = CMMMC( CMMMC(a, b), c )
CMMMC(a, b, c, d) = CMMMC{ CMMMC[ CMMMC(a, b), c ], d }

... etc.

Ar trebui sa fie suficient de rapid asa.
3  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 876 Nums : Mai 31, 2009, 16:59:11
Am facut problema cu arbori de intervale. Daca trimit numai citirea si sortarea, imi ia cam jumatate de timp. Folosesc sort din STL. Cum as putea sorta mai rapid niste stringuri?
4  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 823 Reteta2 : Mai 27, 2009, 15:03:03
Nu stiu exact cum faci, dar windows trece cu vederea unele erori aparent neimportante din partea programatorului. De exemplu, ti se cere sa afisezi produsele sortate. Banuiesc ca parcurgi o data sirul si le copiezi pe toate intr-o matrice. Cand termini de copiat cuvantul, ai grija sa pui '\0' la sfarsit (asta nu stiu daca chiar conteaza, dar e bine de facut oricum). Vezi sa declari vectorii folositi putin mai mari decat ai nevoie in cazul sirurilor de caractere, ca sa poti retine si caracterele '\n' si '\0'; asta este o posibila cauza de eroare care apare pe linux dar pe windows nu intotdeauna. Ai grija sa nu fie ceva la sortare tot de genul acesta.

Eu am luat 100 avand grija sa citesc cu fgets, sa nu ma intereseze de '\n', sa declar vectorii de dimensiuni mai mari si sa pun '\0'.

Apropo, nu se acorda punctaje partiale asa cum scrie in enunt.
5  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 823 Reteta2 : Mai 27, 2009, 13:01:27
Daca citesti cu gets / fgets vezi ce se intampla cand ai si cand nu ai '\n' la sfarsitul liniei.
6  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 666 2Numere : Ianuarie 09, 2009, 09:58:01
Ori asta ori afisam cu -. Oricum, practic inseamna raspuns gresit, daca mai are cineva probleme.
7  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 666 2Numere : Ianuarie 08, 2009, 15:22:59
Ce inseamna "Format incorect"? Trebuie afisat intr-un fel anume (cu privire la spatii sau linii noi, in afara de ce precizeaza enuntul) sau inseamna ca raspunsul este gresit?
8  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 717 Virus : Decembrie 12, 2008, 19:46:07
In trie bagi toate cele N cuvinte care ti se dau, iar apoi pentru fiecare sufix al lui L, vezi daca vreun prefix (de lungime maxim K bineinteles) al acelui sufix se gaseste in trie. Trebuie sa fii atent la cazul in care ai mai multi virusi identici, sa stii sa incrementezi pentru amandoi raspunsul. Poti sa tii o lista pentru asta.
9  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 717 Virus : Decembrie 12, 2008, 16:53:41
Memorie nu-ti trebuie O(L*K) pentru trie. Iti trebuie O(K2).
10  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 717 Virus : August 27, 2008, 20:29:56
Merge si trie simplu in O(L*k)... si inca foarte rapid: http://infoarena.ro/job_detail/192070

Cred ca testele sunt cam slabe...
11  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Distante! : August 18, 2008, 17:34:09
Tu ai ales minimul dintre valori ale matricii costurilor. Eu am zis ca se alege minimul dintre apeluri recursive.

Uite un program care l-am scris rapid, nu stiu daca e 100% corect, dar pe exemplul tau da corect: 7.

Cod:
int n, m;
int a[maxn][maxn];
int memo[maxn][maxn];
int v[maxn][maxn];

int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, -1, 1};

int back[maxn][maxn];

int go(int x, int y)
{
    if ( memo[x][y] != -1 )
        return memo[x][y];

    if ( v[x][y] )
        return 1 << 29;

    v[x][y] = 1;

    for ( int i = 0; i < 4; ++i )
    {
        int X = x + dx[i];
        int Y = y + dy[i];

        if ( X > 0 && Y > 0 && X <= n && Y <= m )
            if ( go(X, Y) + a[x][y] < memo[x][y] || memo[x][y] == -1 )
                memo[x][y] = go(X, Y) + a[x][y], back[x][y] = i;
    }

    v[x][y] = 0;

    return memo[x][y];
}

int main ()
{
    fscanf(in, "%d %d", &n, &m);

    for ( int i = 1; i <= n; ++i )
        for ( int j = 1; j <= m; ++j )
            fscanf(in, "%d", &a[i][j]), memo[i][j] = -1;

    memo[1][1] = a[1][1];

    printf("%d\n", go(3, 3));

    for ( int i = 1; i <= n; ++i )
    {
        for ( int j = 1; j <= m; ++j )
            printf("%d ", back[i][j]);
        printf("\n");
    }

    return 0;
}
12  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Distante! : August 18, 2008, 15:49:34
Problema nu merge si cu memoizare?

Fie f(i, j) costul minim pentru a ajunge de la punctul de plecare (x, y) pana in (i, j). f(i, j) = cost[ i ][ j ] + min(f(i+1, j), f(i, j+1), f(i-1, j), f(i, j-1)).

f(x, y) se initializeaza cu cost[ x ][ y ] si eventual mai trebuie avut grija sa nu se apeleze recursiv pentru zone inaccesibile (i, j < 0 etc)

Pare corect. Complexitatea nu ar fi patratica daca se aplica memoizare?
13  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 241 BMatrix : Mai 06, 2008, 13:01:04
Eu sunt foarte curios cum se face submatrice maxima plina de zerouri in O(n2)... as fi recunoscator daca ar explica cineva ideea Smile.
14  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 560 Abc2 : Aprilie 03, 2008, 11:59:28
Mie mi-a intrat cu cautare binara clasica.

Care e "hashul cu functia lui Mircea"?
15  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 560 Abc2 : Aprilie 02, 2008, 15:15:59
A intrat asa Smile. Mersi!
16  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 560 Abc2 : Aprilie 02, 2008, 12:08:59
Cum adica sa parsez citirea, aici? Citesc cu fgets sirul initial si apoi fiecare cuvant in parte tot cu fgets. Daca trimit doar citirea cel mai mare timp e 0.6 pe testul 8. Se poate mai rapid?

17  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 560 Abc2 : Aprilie 01, 2008, 19:31:31
Nu reusesc nicicum sa iau testele 8 si 9. Restul intra in sub o secunda, la astea primesc TLE. Folosesc 2 hashuri. Imi dati va rog o sugestie?
18  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 671 Joc7 : Martie 07, 2008, 20:18:45
Tocmai, ca inca se precizeaza ca exista intotdeauna solutie, ceea ce m-a dus cu gandul ca exemplul ar fi gresit. Asta era, imi intra in ciclu infinit cand nu aveam solutie.

Si cred ca trebuie n < 2 miliarde, nu 20 de miliarde, pt ca eu am luat 100 folosind int.
19  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 671 Joc7 : Martie 07, 2008, 19:52:02
E corect exemplul 2? Se cere nivelul minim 100 iar el termina jocul cu nivelul 19?
20  Comunitate - feedback, proiecte si distractie / Arhiva educationala / Răspuns: Despre ce este vorba... : Februarie 25, 2008, 19:00:52
Roy-Floyd nu e acelasi lucru cu Floyd-Warshall? Wikipedia asa zice Tongue

As contribui si eu... m-as putea ocupa de dijkstra, bellman-ford si eventual niste algoritmi care vad ca nu sunt trecuti acolo: subsecventa de suma maxima, distanta levenshtein, exponentiere logaritmica...
21  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 232 Fold : Februarie 09, 2008, 14:11:54
Pai.. ai doua solutii ca sa afli bitii de 1 dintr`un numar.
1. Daca in program, trebuie sa afli bitii de 1, din foarte multe numere, poti face o precalculare in O(Nmax), apoi raspunzi in O(1) pt fiecare numar.
2. Daca in program, trebuie sa aflii bitii de 1, din foarte putine numere, poti face chestia asta in O(nr_de_biti_de_1). [Practic imparti la 2 numarul pe care il ai, si numeri de cate ori nr respectiv % 2 ==1).
 In ambele cazuri, e bine sa folosesti operatiile pe biti, ca sa micsorezi timpul de executie.
Apropo, problema poate fi rezolvata si O(N^2*M) cu parsarea citirii.  Very Happy

La 2 e O(log2Numar) sau O(numar_total_de_biti) asa cum zici tu, nu O(nr_biti_de_1), pentru ca tu verifici si bitii care sunt pe 0 impartind la 2 si facand modulo 2 la fiecare pas.
22  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 461 Sate : Februarie 08, 2008, 16:18:54
Ai grija sa opresti cautarea (break, return) cand ai ajuns la solutie.
23  Comunitate - feedback, proiecte si distractie / Imbunatatire teste / Răspuns: 027 Loto : Februarie 07, 2008, 23:01:31
Eu am o sursa veche care intra lejer in 0.2 secunde. Probabil ca se poate si in 0.1.. deci 0.4 e oricum mult
24  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 116 Suma : Ianuarie 28, 2008, 21:00:40
Cred ca merge si daca imparti fiecare factor si abia apoi faci modulo, adica:

3*4 / 2 = E

3 nu se divide la 2, il ignori
4 se divide, il imparti => E = 3*2

Acuma faci modulo 3 mod 7 = 3, 2 mod 7 = 2 3*2 = 6, 6 mod 7 = 6.
25  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 603 Pairs : Ianuarie 05, 2008, 14:16:21
Ce-ai intrebat tu poti sa faci inteligent tot ca la ciurul lui Erastotene si sa obtii O(MAX*logMAX).

Intr-adevar, a intrat in sub o secunda asa. Mersi!
Pagini: [1] 2 3 ... 7
Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines