infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Adrian Diaconu din Martie 01, 2009, 00:35:15



Titlul: 812 Alge
Scris de: Adrian Diaconu din Martie 01, 2009, 00:35:15
Aici puteti discuta despre problema Alge (http://infoarena.ro/problema/alge).


Titlul: Răspuns: 812 Alge
Scris de: Florian Marcu din Martie 02, 2009, 21:33:28
Cred ca ar trebui specificat faptul ca pestisorul se poate deplasa dintr-un cub de latura 1, doar in sus, jos, stanga, dreapta, fata sau spate. Cu alte cuvinte, o mutare "pe diagonala" nu e valida. Sau cel putin asa inteleg eu din exemplu.  :)


Titlul: Răspuns: 812 Alge
Scris de: Gabriel Bitis din Martie 02, 2009, 22:24:29
La OLI se dadea si lungimea laturii unui grup de alge... vad ca aici nu mai se da. Ati modificat testele?


Titlul: Răspuns: 812 Alge
Scris de: Andrei-Bogdan Antonescu din Martie 02, 2009, 23:23:35
@Gabriel Bitis : Enuntul care l-am primit de la autorul problemei dadea doar coordonatele algelor si asta zice si aici
Citat
Grupurile au forma cubică, fiind situate în cuburi cu latura 1 din secţiune
 

@Marcu Florian : Mersi pentru precizare, am scris in enunt ..  :)


Titlul: Răspuns: 812 Alge
Scris de: gaboru corupt din Martie 02, 2009, 23:27:40
am o problema. nu legata de rezolvare. am trimis o sursa si iau fisier de iesire corupt ( http://infoarena.ro/job_detail/269532 ). fisierele le-am declara in felul urmator:

Cod:
freopen("alge.in","r",stdin);
freopen("alge.out","w",stdout);

ce ar putea sa aiba?

LE: scuze, nu afisam lungimea drumului minim ](*,)


Titlul: Răspuns: 812 Alge
Scris de: Andrei-Bogdan Antonescu din Martie 02, 2009, 23:34:06
@ gaboru corupt : Primesti acest mesaj pentru ca nu afisezi lungimea drumului  :)


Titlul: Răspuns: 812 Alge
Scris de: gaboru corupt din Martie 03, 2009, 15:25:53
ok, am reusit sa prind primele 8 teste. la ultimele doua iau MLE. am implementat cu matrice char si chiar si coada dinamic si tot MLE iau. nu stiu ce sa mai ii fac. chiar nu se poate rezolva asa?

http://infoarena.ro/job_detail/269628

LE: am reusit sa rezolv si problema memoriei, stergand primul nod si coada. dar acuma iarasi iau fisier de iesire corupt. presupun ca e aceasi problema, adica fisieru de iesire nu are formatul cerut. totusi nu stiu de ce. am incercat sa ciclez programul daca lungimea drumului minim este diferita de numarul de coordonate afisate. nu cicleaza. ce ar putea avea?


Titlul: Răspuns: 812 Alge
Scris de: Andrei-Bogdan Antonescu din Martie 04, 2009, 19:27:08
Cred ca luai fisier de iesire corupt din cauza iesirii din memorie.
Orcum vad ca ai rezolvat  :)


Titlul: Răspuns: 812 Alge
Scris de: gaboru corupt din Martie 04, 2009, 19:37:36
inca ma gandesc de ce nu mergea. foloseam matricea char, iar pe pozitia (1,1,1) puneam '1'. si pe cum parcurgeam incrementam. se poate sa fi iesit din char? adik '1' are valoarea 49 si poate am depasit 255 cat are char. ca matricea o aveam de 37*37*37 pt ca o si bordam. deci nu cred ca e din cauza aia. si inca ceva, unde pot gasii testele, respectiv solutiile oficiale de la OLI?


Titlul: Răspuns: 812 Alge
Scris de: razyelx din Martie 06, 2009, 13:14:11
Cu toate ca am rezolvat problema, pe parcurs am intampinat unele dificultati legate de memorie. Daca avem 640 KB, iar 1 INT = 4 bytes, atunci putem folosi (1024 x 640)/4 elemente de tip INT. Sau gresesc?


Titlul: Răspuns: 812 Alge
Scris de: Pripoae Teodor Anton din Martie 06, 2009, 15:41:49
Gresesti. Din memoria totala tre sa scazi in jur de 200 de kb, memoria folosita de sistem pentru a rula executabilul tau. Stiu ca uneori luam "kill by signal 11" chiar si cand declaram 13 mega, si limita era de 16.


Titlul: Răspuns: 812 Alge
Scris de: Tirca Bogdan din Aprilie 02, 2009, 20:02:43
Gaboru,35*35*35=42875 si depaseste cu mult "valoarea in int" pe care o poate retine un char...


Titlul: Răspuns: 812 Alge
Scris de: Emanuel Cinca din Aprilie 02, 2009, 20:44:13
In matricea char retii chiar un char, un simbol si cand transformi devine cod ASCII egal cu distanta/costul, deci poti retine destul de mult. Nu retii un numar propriu-zis, fiindca atunci ai putea retine doar de la 0 la 9.


Titlul: Răspuns: 812 Alge
Scris de: Paul-Dan Baltescu din Aprilie 02, 2009, 21:01:36
Gaboru,35*35*35=42875 si depaseste cu mult "valoarea in int" pe care o poate retine un char...

Nu, ai dreptate. In char poti tine numere de la -128 la 127.

Chiar daca initiativa ta este de laudat, e bine sa raspunzi doar la intrebari puse recent (mai putin de 5-10 zile as zice, dar desigur mai variaza in functie de caz). Nu cred totusi ca un utilizator intra zi de zi pe forum si isi verifica toate mesajele la care nu a primit raspuns.


Titlul: Răspuns: 812 Alge
Scris de: Andrei Grigorean din Aprilie 02, 2009, 21:20:50
In matricea char retii chiar un char, un simbol si cand transformi devine cod ASCII egal cu distanta/costul, deci poti retine destul de mult. Nu retii un numar propriu-zis, fiindca atunci ai putea retine doar de la 0 la 9.

Ba nu, in C variabilele de tip char sunt de fapt int-uri pe 8 biti. Poti lucra cu ele foarte bine ca si cu un int normal.


Titlul: Răspuns: 812 Alge
Scris de: Emanuel Cinca din Aprilie 02, 2009, 21:35:55
In matricea char retii chiar un char, un simbol si cand transformi devine cod ASCII egal cu distanta/costul, deci poti retine destul de mult. Nu retii un numar propriu-zis, fiindca atunci ai putea retine doar de la 0 la 9.

Ba nu, in C variabilele de tip char sunt de fapt int-uri pe 8 biti. Poti lucra cu ele foarte bine ca si cu un int normal.

Nu stiam ca sunt int-uri pe 8 biti. Eu ma refer ca poti face operatii de genul mt[ i ][ j ][ k ]=1 sau mt[ i ][ j ][ k ]++, unde mt e o matrice de tip char, doar ca daca vrei sa afisezi 1 va trebui cout<<(int)mt[ i ][ j ][ k ], altfel fiind afisat un simbol. :peacefingers:


Titlul: Răspuns: 812 Alge
Scris de: Andrei Grigorean din Aprilie 02, 2009, 22:05:44
Da, pentru ca streamurile stiu ca e caracter si il printeaza/citesc ca atare.

In schimb, in programul urmator:

Cod:
int main() {
    char ch;
    scanf("%d", &ch);
    printf("%d", ch);
}

... daca se introduce la rulare numarul 97 se printeaza tot 97.


Titlul: Răspuns: 812 Alge
Scris de: Flavius Anton din Februarie 27, 2010, 18:59:42
Nu prea merge o implementare recursiva asemanatoare cu fillul nu ? Ca vad ca iau MLE rau de tot.


Titlul: Răspuns: 812 Alge
Scris de: Florian Marcu din Februarie 27, 2010, 21:00:20
S-ar putea sa mearga daca nu ii dai functiei Fill, cubul ca parametru. ( cu alte cuvinte, cub[][][] sa fie global )


Titlul: Răspuns: 812 Alge
Scris de: Flavius Anton din Februarie 28, 2010, 11:38:04
Intr-adevar se mai micsoreaza spatiul de memorie folosit, dar tot nu e suficient. Eu mai am inca o functie recursiva si pt afisare  :oops:

LE. Nu am reusit sub nicio forma recursiv, am luat 100 pana la urma, dar renuntand total la recursivitate. :P


Titlul: Răspuns: 812 Alge
Scris de: Palade Thomas-Emanuel din Ianuarie 03, 2016, 12:51:20
Pentru cei care cumva iau MLE, merge si cu short sa declarati matricile in loc de int  :)


Titlul: Răspuns: 812 Alge
Scris de: Constantin Mihai din Februarie 16, 2016, 21:19:29
Poate cineva sa ma ajute, va rog?
Iau MLE pe ultimele 2 teste si nu stiu ce as mai putea optimiza.
http://www.infoarena.ro/job_detail/1602643?action=view-source


Titlul: Răspuns: 812 Alge
Scris de: Andi Arnautu din Februarie 16, 2016, 23:58:24
Folosesti mai multa memorie decat este necesara la coada. Dupa ce extragi elementul din capul cozii, sterge-l. ;) Pentru asta, schimba container-ul vector cu unul queue.


Titlul: Răspuns: 812 Alge
Scris de: Constantin Mihai din Februarie 17, 2016, 15:53:20
Multumesc mult. :)