infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Adrian Diaconu din August 14, 2007, 10:34:11



Titlul: 478 Dir
Scris de: Adrian Diaconu din August 14, 2007, 10:34:11
Aici puteţi discuta despre problema Dir (http://infoarena.ro/problema/dir).


Titlul: Răspuns: 478 Dir
Scris de: alex ionescu din Octombrie 17, 2007, 20:48:56
SAlut!!!!! am facut problema dir, in felul urmator: am parcurs sirul de la inceput si de fiecare data cand am dat de un folder il bag in stiva si cand dau de un fisier scot folderele care au mai ramas in stiva si le memorez intr-un vecotr rez.........caile imi dau toate corect numa ca am o problema la sortarea lexicografica ca nush cum se face...adica nu inteleg.....cine ma poate ajuta pls?


Titlul: Răspuns: 478 Dir
Scris de: Andrei Homorodean din Octombrie 17, 2007, 21:27:33
Parca aveai ceva in genu FOLDER(basm, aa, poveste). Tre sa afisezi FOLDER(aa, basm, poveste). Poti face asta cu bubble sort... Daca lucrezi in C poti folosi strcmp pentru compararea a2-a siruri sau echivalentul din pascal(cauta pe google daca vrei detalii).. Cauta bubble sort(sau orice alta sortare).


Titlul: Răspuns: 478 Dir
Scris de: Bogdan-Alexandru Stoica din Octombrie 17, 2007, 21:31:56
poti sa faci urmatorul algoritm:

pentru doua cuvinte cu indicii i si j (i < j) cauta o pozitie p pentru care, caracterele din cele doua siruri sunt diferite. daca litera din cuvantul i, de pe acea pozitie, e mai mare decat cea din cuvantul j, de pe acea pozitie, atunci interschiba cele doua cuvinte (i trece in locul lui j si j trece in locul lui i).

Cod:
for (i = 0; i < nrez; i++)
       for (j = i+1; j < nrez; j++)
       {
              min = MINIM(LungimeCale[i], LungimeCale[j]);
              for (k = 0; k < min; k++)
                     if (Cale[i][k] > Cale[j][k])
                             //interschimb cele doua cai
        }

pentru a evita o complexitate prea mare poti sa aplici urmatoarea optimizare: in loc sa interschimbi tot cuvantul, mai bine interschibi niste indici. construiest vectorul Indice[ i ] = al i-lea cuvant (dupa indice) din sortarea lexicografica. initial presupui ca Indice[ i ] = i (adica presupui caile sortate). codul de mai sus devine :

Cod:
for (i = 0; i < nrez; i++)
       for (j = i+1; j < nrez; j++)
       {
              min = MINIM(LungimeCale[ Indice[i] ], LungimeCale[ Indice[j] ]);
              for (k = 0; k < min; k++)
                     if (Cale[ Indice[i] ][k] > Cale[ Indice[j] ][k])
                               aux = Indice[i], Indice[i] = Indice[j], Indice[j] = aux;
        }

la sfarsit vei avea: Indice[0] - indicele primul cuvant in ordine lexicografica, Indice[1] - al doilea cuvant in ordine lexicografica, ...., Indice[N-1] al N-lea cuvant in ordine lexicografica.


Titlul: Răspuns: 478 Dir
Scris de: alex ionescu din Octombrie 18, 2007, 15:03:00
Sa presupunem ca se da urmatorul sir FOLDER1(basme,FOLDER5(),FOLDER6(snoava),FOLDER2(),FOLDER3(FOLDER4(poveste,basm),basm))..dupa cum am sortat eu imi da:
5
FOLDER1\basme
FOLDER1\FOLDER6\snoava
FOLDER1\FOLDER3\FOLDER4\basm
FOLDER1\FOLDER3\FOLDER4\poveste
FOLDER1\FOLDER3\basm
DAR REZULTATUL CORECT este :
5
FOLDER1\FOLDER3\FOLDER4\basm
FOLDER1\FOLDER3\FOLDER4\poveste
FOLDER1\FOLDER3\basm
FOLDER1\FOLDER6\snoava
FOLDER1\basme

Cine ma ajuta sa imi spuna cum pot repara greseala!!!!!



Titlul: Răspuns: 478 Dir
Scris de: Bogdan-Alexandru Stoica din Octombrie 18, 2007, 16:34:02
ordinea literelor reprezentate in memoria calculatorului este:

litere:           'A' < 'B' < .... < 'Z' < 'a' < 'b' < .... < 'z'
coduri ASCII: 65    66          90     97   98          122


in exemplul tau, consideri ca 'b' < 'F' ceea ce este fals, conform tabelului ASCII.


Titlul: Răspuns: 478 Dir
Scris de: Bogdan-Alexandru Stoica din Octombrie 18, 2007, 16:36:08
 :-k cum faci sortarea? descrie un pic principiul


Titlul: Răspuns: 478 Dir
Scris de: Bogdan-Alexandru Stoica din Octombrie 18, 2007, 16:53:39
dubios, dar totul e bine cand se termina cu un max :D


Titlul: Răspuns: 478 Dir
Scris de: Bogdan-Alexandru Stoica din Octombrie 18, 2007, 17:06:46
sigur. ti l-am trimis intr-un mesaj privat.


Titlul: Răspuns: 478 Dir
Scris de: Bozianu Ana din Decembrie 18, 2007, 19:26:05
Va rog sa imi dati doua precizari legate de fisierul de intrare :
1) Linia din fisierul de intrare se termina cu "\n" ?
2) Linia din fisirerul de intrare poate sa contina spatii?
Multumiri.  :roll:


Nu mai e cazul. Intre timp am rezolvat problema si am descoperit :
1) linia se termina cu '\n'
2) linia nu contine spatii


Titlul: Răspuns: 478 Dir
Scris de: Ionescu Robert Marius din Decembrie 28, 2007, 15:21:00
dati si mie un input mai aiurea sa vad ce gresesc,ca pe testele mele da bine :( :sad:


Titlul: Răspuns: 478 Dir
Scris de: Florian Marcu din Decembrie 28, 2007, 15:27:58
Ai putea sa vezi testele de la oji 2007.  :)


Titlul: Răspuns: 478 Dir
Scris de: Ionescu Robert Marius din Decembrie 28, 2007, 15:30:02
 :aha:  ms :D  =D&gt;


Titlul: Răspuns: 478 Dir
Scris de: Ionescu Robert Marius din Decembrie 28, 2007, 15:46:27
am vazut ce greseam puneam / in loc de \ insa nushtiu cum sa pun doar un \ help
multumesc anticipat :roll:


Titlul: Răspuns: 478 Dir
Scris de: Florian Marcu din Decembrie 28, 2007, 15:47:51
printf("\\");


Titlul: Răspuns: 478 Dir
Scris de: Farcasanu Alexandru Ciprian din Martie 19, 2008, 22:02:47
Am si eu o problema. am facut bine merci problema, merge pe toate testele mele + cele de la oji de 100 p. numai ca aici cand trimit sursa iau KBS 11. Am citit cam ce ar insemna acest KBS11 din "documentatie" dar am avut grija sa nu accesez memorie nepermisa, am declarat vectorii suficienti de largi, totul ar trebui sa fie ok, dar nu e! Ma poate ajuta si pe mine cineva?

Later Edit: Never Mind, am rezolvat.sincer nu prea stiu ce avea...doar m-am jucat putin cu lungimea vectorilor. PS daca depasesc limita de memorie se poate sa iau KBS?


Titlul: Răspuns: 478 Dir
Scris de: Florian Marcu din Martie 19, 2008, 22:17:38
PS daca depasesc limita de memorie se poate sa iau KBS?

Da.  :)


Titlul: Răspuns: 478 Dir
Scris de: Flavius Anton din Noiembrie 04, 2008, 12:26:05
imi da eroare pt functia strrev. Why?


Titlul: Răspuns: 478 Dir
Scris de: Andrei Grigorean din Noiembrie 04, 2008, 17:04:29
Functia strrev nu face parte din standardul C. Poti foarte usor sa scrii o varianta proprie, de mana :thumbup:


Titlul: Răspuns: 478 Dir
Scris de: Robert Hangu din Iunie 18, 2009, 16:54:58
mi-am evaluat programul cu testele de la oji, si imi intra lejer in timp sub 4ms si memorie sub 16kb pe toate testele. aici vad ca imi da tle pe toate, desi restrictiile datelor de intrare sunt aceleasi ca la oji. gresesc eu undeva si nu-mi dau seama?


Titlul: Răspuns: 478 Dir
Scris de: Florian Marcu din Iunie 18, 2009, 17:27:25
M-am uitat pe timpii tai, si banuiesc ca iti intra in ciclu infinit. Sursa mea a luat 4 ms/test, maxim. Vezi ca functiile pt siruri de caractere se comporta diferit pe linux fata de windows. Ai grija ce faci cu '\n'-urile citite, ar fi bine sa pui '\0' la sfarsitul fiecarui sir [ si atunci cand scazi nivelul stivei, sa faci NULL si sirul corespunzator nivelului ]. Am vazut ca ai si un warning. Poate e de acolo. Nu prea are ce sa fie... Spor! 


Titlul: Răspuns: 478 Dir
Scris de: Robert Hangu din Iunie 18, 2009, 18:09:34
Pe linux am lucrat si imi merge perfect. M-am folosit de evaluatorul lui sandyxp si de testele oficiale de la oji.
Da, de fiecare data cand am coborat am pus 0 pe acel nivel, si citesc cu fgets, si am fost atent si la '\n'-uri.

L.E: S-a rezolvat. Problema a fost ca eu citeam cu fgets sirul de intrare. Cand am citit caracter cu caracter a mers. Dubios, oare ce-o fi avand fgets? :-?


Titlul: Răspuns: 478 Dir
Scris de: Florian Marcu din Iunie 18, 2009, 19:45:32
Atunci, vezi poate e de la warningul asta: array subscript has type 'char'. Vezi sa faci convertire cand apelezi vector[caracter] ( ceva de genu: vector[(int)caracter] ).  Eu am facut citirea caracter cu caracter... Chiar nu stiu ce poate sa aiba...  :-k


Titlul: problema dir
Scris de: Vlad Eugen Dornescu din Decembrie 14, 2009, 16:58:27
ma chinui de 2 zile la www.infoarena.ro/problema/dir si iau doar 60 de puncte (testele 6-9 inclusiv) sunt gresite.m-am uitat pe testele de la oji..... problema e ca nu imi parcurge toate folderele, la testele astea mai mari, si nu am cum sa ma corectez.puteti sa-mi dati vreun exemplu va rog , sa testez daca imi merge bine. chiar nu stiu, nu imi dau seama ce nu e in regula...poate am uitat vreun caz particular sau ceva?  ](*,)


Titlul: Răspuns: problema dir
Scris de: Paul-Dan Baltescu din Decembrie 14, 2009, 17:51:44
Fiecare problema de pe site are un topic destinat discutiilor pe marginea ei. Pune intrebarile acolo, sa poata castiga toata lumea de pe marginea sfaturilor date!


Titlul: Răspuns: problema dir
Scris de: Sima Cotizo din Decembrie 14, 2009, 18:09:21
Fiecare problema de pe site are un topic destinat discutiilor pe marginea ei. Pune intrebarile acolo, sa poata castiga toata lumea de pe marginea sfaturilor date!
Fixed :)


Titlul: Răspuns: 478 Dir
Scris de: Vlad Eugen Dornescu din Decembrie 14, 2009, 18:29:41
scuze, ca n-am postat unde trebuie.Era din cauzaa  a "f.getline(s,250)", cea mai prosteasca greseala. nu am fost atent ca se pot citi maxim 1600 de caractere  :ok:


Titlul: Răspuns: 478 Dir
Scris de: Vlad Eugen Dornescu din Aprilie 16, 2010, 20:06:32
Autorul problemei 'Dir' este dl.prof. Alin Burta


Titlul: Răspuns: 478 Dir
Scris de: George Marcus din Februarie 02, 2011, 16:32:20
Tot n-am inteles de ce nu a mers fgets la problema asta. La alte probleme nu mi s-a intamplat.


Titlul: Răspuns: 478 Dir
Scris de: Stanca Marian Ciprian din Martie 01, 2011, 21:22:32
Nu iti merge cu fgets pentru ca, din cate imi amintesc eu, fgets citeste un numar fix de caractere sau tot sirul. Tu trebuie sa citesti pana la spatiu, deci poti folosi fscanf :D


Titlul: Răspuns: 478 Dir
Scris de: Simoiu Robert din Martie 02, 2011, 16:47:08
Mie mi-a mers ..... : fgets ( S, 1660, fisier ) .


Titlul: Răspuns: 478 Dir
Scris de: George Marcus din Martie 02, 2011, 17:35:46
Eu cu asa ceva luam TLE pe toate testele:

char s[1700];
fgets(s,sizeof(s),stdin);


Titlul: Răspuns: 478 Dir
Scris de: abcd efgh din Martie 15, 2011, 16:31:38
Mie imi da 100p pe infoareana si 0p pe arhiva  :o (cam ciudat).


Titlul: Răspuns: 478 Dir
Scris de: Radu-Andrei Szasz din Februarie 19, 2012, 22:28:08
Am pus problema pe evaluatorul de pe infoarena si am luat 10 puncte, iar pe testele de la OJI, iau 100.

Ce ar putea avea?


Titlul: Răspuns: 478 Dir
Scris de: George Marcus din Februarie 19, 2012, 22:38:31
Probabil se trage de la gets. Incearca alta functie.


Titlul: Răspuns: 478 Dir
Scris de: Radu-Andrei Szasz din Februarie 19, 2012, 22:42:52
Am citit acum si cu scanf si tot asa imi da...


Titlul: Răspuns: 478 Dir
Scris de: Avramescu Cristian din Ianuarie 30, 2013, 22:16:38
Desi pe testele de la oji imi merge bine aici iau doar 80 de puncte de la ce poate sa fie? :D


Titlul: Răspuns: 478 Dir
Scris de: Florin Gabriel Haja din Decembrie 01, 2015, 15:15:54
Puteți să explicați de ce iau 0 puncte pe această sursă? Când o trimit pe .campion iau 100.
http://www.infoarena.ro/job_detail/1539740 (http://www.infoarena.ro/job_detail/1539740)

L.E.: Nu, mulțumesc, nu mai am nevoie de ajutor, am descoperit că evaluatorul infoarena citește slash-ul ca '\\' și nu char(92).


Titlul: Răspuns: 478 Dir
Scris de: Roman Tudor din Martie 07, 2016, 16:14:19
Se dau și punctaje parțiale la această problemă sau nu?