infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Adrian Diaconu din Decembrie 01, 2008, 13:23:50



Titlul: 340 Take 5
Scris de: Adrian Diaconu din Decembrie 01, 2008, 13:23:50
Aici puteti discuta despre problema Take 5 (http://infoarena.ro/problema/take5).


Titlul: un sfat
Scris de: Bula Ionut din Decembrie 03, 2008, 00:02:52
De fapt, problema aceasta cum se rezolva?
backtracking iese din schema, nu?
 :)
---------
putin offtopic dar o includem si pe asta
ce-ar fi sa puneti problemele de la All you can code 2008 la sfarsitul listei, in arhiva de probleme
asa trebuie cautate pe la pagina 7
http://infoarena.ro/arhiva?display_entries=50&first_entry=300

iar cine se pricepe poate implementa o optiune de sortare dupa titlu, autor, numar, sursa, etc, etc. la tabelul cu probleme, asta daca nu s-a gandit nimeni pana acum :P


astept pe cineva sa vad ce pareri sunt despre rezolvarea acestei probleme.
cred ca e ceva chiar mai interesant decat ma gandesc...

[Edit] Nu mai posta de 2 ori consecutiv atata timp cat ai buton de edit


Titlul: Răspuns: 340 Take 5
Scris de: Andrei Grigorean din Decembrie 03, 2008, 00:38:52
Din pacate nu putem sa schimbam ordinea problemelor in arhiva. Acestea apar cronologic.

Sortari, filtrari in arhiva avem in plan... Va trebui insa sa mai asteptati pentru asta deoarece suntem foarte ocupati.


Titlul: Răspuns: 340 Take 5
Scris de: Nad Acrepuic din Mai 01, 2009, 09:01:33
Poate merge un back asa mai optimatizat   :D daca nu baga ceva foruri pe acolo.


Titlul: Răspuns: 340 Take 5
Scris de: Andrei Misarca din Mai 01, 2009, 10:13:23
Ce complexitate trebe, cu O(N^3) iau numa 50  :)


Titlul: Răspuns: 340 Take 5
Scris de: Nad Acrepuic din Mai 02, 2009, 08:09:32
Poti sa iei si 70 daca optimatizezi mult si poti sa incerci sa reduci spre N^2  :wink:


Titlul: Răspuns: 340 Take 5
Scris de: Visan Radu din Ianuarie 05, 2013, 15:56:38
Limita de timp cred ca este cam mica, iau maxim 70 80 de puncte, complexitatea teoretica e O(N ^ 3). Stiu ca e cam mare, dar 2 din cele 4 surse de 100 au timpi in jur de 3.2-3.6 sec.
E buna limita de timp.


Titlul: Răspuns: 340 Take 5
Scris de: Sorin Rita din Ianuarie 05, 2013, 19:04:30
Apropo...cum se rezolva problema asta de 100 de puncte ? Se poate O(n^2) ? Avand in vedere ca sunt asa putine scoruri de 100 chiar nu cred ca s-ar supara nimeni daca ar da cineva o solutie.


Titlul: Răspuns: 340 Take 5
Scris de: Mihai Alex Ionescu din Ianuarie 05, 2013, 22:11:14
Uitanduma pe leetcode, mi-am amintit iar de aceasta problema, cum ca de un an tot nu stiu sa scot mai bun de N^3 cu un hash, si eu sunt foarte curios cum se face aceasta problema de 100 de puncte
Am gasit un articol  http://en.wikipedia.org/wiki/3SUM (http://en.wikipedia.org/wiki/3SUM) pe wikipedia care zice ca pentru cazul cu 3 numere nu se poate mai bine decat N^2, asa ca banuiesc ca pentru 5 numere marginea inferioara teoretica e N^3 . Se poate face de 100 cu N^3 si hash sau tre sa schimb total algoritmul ?


Titlul: Răspuns: 340 Take 5
Scris de: Petru Trimbitas din Ianuarie 05, 2013, 23:21:34
Limita de timp probabil e buna. Cred ca merge n^3 fara hash. Hash-ul merge in O(1) amortizat, dar probabil din cauza memoriei la problema asta n-o sa prea mearga in O(1)


Titlul: Răspuns: 340 Take 5
Scris de: Florin Chirica din Ianuarie 10, 2013, 15:44:19
Poate cineva care a luat 100 sa-mi spuna ce a optimizat? Ma chinui la problema asta de ceva vreme si nu mai am nicio idee cum sa o mai imbunatatesc  ](*,)


Titlul: Răspuns: 340 Take 5
Scris de: Stratulat Alexandru din Martie 09, 2013, 22:36:13
Am facut O(n^3) cu hashuri si iau 65 de pct cu TLE si am incercat sa fac putin altfel si acum iau 25 de pct cu MME. Cum e posibil sa iau MME cand memoria folosita este aceeasi ? Chiar nu inteleg ce naiba se intampla  ](*,)
Iata codul initial:

inline void solve(){
 
int S=0;
    for(register int i=1;i<=N-2;++i){
        for(register int j=i+1;j<=N-1;++j){
            for(register int k=j+1;k<=N;++k){
                    S = V+V[j]+V[k];
 
            if(C-S>0)
                Search(C-S);
            }
 
        }
 for(register int z=1;z<i;++z)
            Add(V+V[z]);
}
 
printf("%d",nr);
}

Si iata codul cu care iau MME:

inline void solve(){

int S=0;
    for(register int i=1;i<N;++i){
        for(register int j=i+1;j<=N;++j){

                    S = V+V[j];
                if(C-S>0)
                Search(C-S);
}

 for(register int z=1;z<i;++z)
    for(register int j=z+1;j<i;++j)
            Add(V+V[z]+V[j]);
}

printf("%d",nr);
}