•wefgef
|
 |
« : Martie 10, 2008, 16:27:28 » |
|
Aici puteti discuta despre problema Combinari.
|
|
|
Memorat
|
omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
|
|
|
•hulparuadrian
Strain
Karma: 0
Deconectat
Mesaje: 15
|
 |
« Răspunde #1 : Martie 11, 2008, 11:28:23 » |
|
Nu ar trebui ca backul iterativ sa fie mai eficient decat ce recursiv? Io iau 90 cu un back iterativ, si asta dupa ce am schimbat citirea si scrierea in fisiere, pt k luam doar 80 cu streamuri...  Ciudata si chestia asta... Imi poate spune si mie cineva cum as putea optimiza backul meu iterativ k sa iau 100??
|
|
|
Memorat
|
|
|
|
•Binary_Fire
Client obisnuit

Karma: 82
Deconectat
Mesaje: 87
|
 |
« Răspunde #2 : Martie 11, 2008, 11:40:14 » |
|
Am vazut ca in sursa ta tot faci verificarea asta: for(int j=1;j<i;j++) if (x[j+1]<=x[j]) return 0; return 1;
Gandeste-te ca poti sa generezi permutarile direct, corect, fara verificare. Exemplu daca ai deja generat : 1 3 5 atunci urmatorul element il vei alege ca fiind mai mare decat 5, nu le mai incerci si pe alea mai mici sau egale decat 5 pentru ca sigur nu vor fi bune. Analizeaza si alte surse, ca sa vezi diferite implementari.
|
|
|
Memorat
|
|
|
|
•hulparuadrian
Strain
Karma: 0
Deconectat
Mesaje: 15
|
 |
« Răspunde #3 : Martie 11, 2008, 12:11:25 » |
|
Mersi mult pentru sfaturi...am schimbat putin cck() si acum imi merge de 100...
|
|
|
Memorat
|
|
|
|
•sigrid
|
 |
« Răspunde #4 : Martie 11, 2008, 19:14:11 » |
|
Nu ar trebui ca backul iterativ sa fie mai eficient decat ce recursiv? Io iau 90 cu un back iterativ, si asta dupa ce am schimbat citirea si scrierea in fisiere, pt k luam doar 80 cu streamuri...  Ciudata si chestia asta... Imi poate spune si mie cineva cum as putea optimiza backul meu iterativ k sa iau 100?? eu luam 90 cu streamuri si back recursiv, cu citire in c iau 100 stiu ca sunt offtopic, dar de ieri la monitorul de evaluare nu mai pot sa vedea "solutiile mele" , de fiecare data trebuie sa ma uit la "toate solutiile", aveti idee de ce  ?
|
|
« Ultima modificare: Martie 11, 2008, 19:24:38 de către stanciu v maria »
|
Memorat
|
|
|
|
•MciprianM
|
 |
« Răspunde #5 : Martie 12, 2008, 12:03:41 » |
|
Eu iau 100 cu streamuri si back recursiv. Fara functie de verificare. Cel mai lung test 2->160ms restu in jur de 0;
|
|
|
Memorat
|
|
|
|
•vlad_oltean
Strain
Karma: 2
Deconectat
Mesaje: 25
|
 |
« Răspunde #6 : Martie 15, 2008, 22:23:45 » |
|
Am vazut ca in sursa ta tot faci verificarea asta: for(int j=1;j<i;j++) if (x[j+1]<=x[j]) return 0; return 1;
Gandeste-te ca poti sa generezi permutarile direct, corect, fara verificare. Exemplu daca ai deja generat : 1 3 5 atunci urmatorul element il vei alege ca fiind mai mare decat 5, nu le mai incerci si pe alea mai mici sau egale decat 5 pentru ca sigur nu vor fi bune. Analizeaza si alte surse, ca sa vezi diferite implementari. daca stiam chestia asta inainte de oji luam 130 de puncte si poate aveam si eu sanse... oricum buna sugestie 
|
|
|
Memorat
|
|
|
|
•Tase_C
Strain
Karma: 0
Deconectat
Mesaje: 4
|
 |
« Răspunde #7 : Martie 19, 2008, 16:19:20 » |
|
M-a necajit problema asta  . Tot am incercat sa o rezolv. Apoi cand am studiat sursa lui Cezar, care afisa la fel am vazut ca are 100 puncte. Daca am utilizat byte (din datele problemei se vede ca e destul) am luat 0 puncte. Daca am schimbat pe longint, am luat 100 puncte. E o eroare in evaluator, sau e bine de stiut pentru concursuri? Tase
|
|
|
Memorat
|
|
|
|
•wefgef
|
 |
« Răspunde #8 : Martie 19, 2008, 17:09:54 » |
|
Tu compari s[k] cu s[k-1] la un moment dat. Dar vectorul s este de forma s[1..20]. De aici cred eu ca ti se trage eroare. Cand ai pus pe longint vad ca ai schimbat niste paranteze. Trimite ultima varianta pe byte in care modifici DOAR din byte in longint sa vedem cat iei. Ar trebui sa iei 0 puncte.
|
|
|
Memorat
|
omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
|
|
|
•zuzulica
Strain
Karma: -5
Deconectat
Mesaje: 3
|
 |
« Răspunde #9 : Martie 22, 2008, 14:30:07 » |
|
program p1; type t=1..18; var f1,f2:text; n,k,i,j:t; a:array[1..18] of t; ok:boolean; begin assign(f1,'combinari.in'); reset(f1); readln(f1,n,k); close(f1); for i:=1 to k do a[i]:=i; assign(f2,'combinari.out'); rewrite(f2); if n=k then begin for i:=1 to n do write(f2,a[i],' '); end else begin repeat ok:=true; for i:=1 to k do write(f2,a[i],' '); writeln(f2); inc(a[k]); if a[k]=n+1 then for i:=k downto 2 do begin if a[i]>=n-k+i+1 then begin inc(a[i-1]); for j:=i to k do a[j]:=a[j-1]+1; end; end; if a[1]=n-k+1 then ok:=false; until ok=false; for i:=1 to k do write(f2,a[i],' '); end; close(f2); end.
ce parere aveti de acesta?imi cer scuze pt modul zapacit si ,,nefinisat" in care e facut dar asa e dupa o pauza mare
|
|
« Ultima modificare: Martie 22, 2008, 14:42:15 de către Stefan Istrate »
|
Memorat
|
|
|
|
•toni2007
|
 |
« Răspunde #10 : Martie 22, 2008, 14:42:00 » |
|
sincer m-i se pare ca o scandura  (de curiozitate... ai auzit de indent? ) in rest pare bine 
|
|
|
Memorat
|
|
|
|
•zuzulica
Strain
Karma: -5
Deconectat
Mesaje: 3
|
 |
« Răspunde #11 : Martie 22, 2008, 15:09:08 » |
|
nuj ce am de scriu as a da altfel ma incurc, culmea:)
|
|
|
Memorat
|
|
|
|
•ciprianf
|
 |
« Răspunde #12 : Martie 31, 2008, 11:14:13 » |
|
La "probleme care se pot rezolva cu generare de combinari" puteti adauga problema reteta.
|
|
|
Memorat
|
|
|
|
•roro82ro
Strain
Karma: 0
Deconectat
Mesaje: 1
|
 |
« Răspunde #13 : Ianuarie 14, 2009, 09:54:21 » |
|
Ma intereseaza daca ma poate ajuta cineva sa imi spuneti cu ce program se poate sa vad toate combinarile dintre doua numere. de exemplu combinatii de 4 luate cate 3 ar trebui sa-mi apara: a b c a b d a c d b c d Avand in vedere ca combinari de 4 luate cate 3 sunt doar 4 variante e simplu, dar daca am numere mai mari, de ex. 12 cate 4
Multumesc
|
|
|
Memorat
|
|
|
|
•Florian
|
 |
« Răspunde #14 : Ianuarie 14, 2009, 12:30:08 » |
|
Pai vezi in arhiva educationala problema asta ( Combinari ). Vezi ca sursele trimise le poate vedea oricine. Cauta-ti un program de 100 puncte, si ala o sa-ti genereze combinari de n luate cate k. 
|
|
|
Memorat
|
|
|
|
•cr1st18
Strain
Karma: 1
Deconectat
Mesaje: 39
|
 |
« Răspunde #15 : Martie 15, 2009, 20:37:03 » |
|
1. #include<stdio.h> 2. int sol[101],n,m; 3. void back (int k,int m,int p) 4. { 5. int i,j; 6. if (k==m+1) 7. { 8. for (j=1; j<=m; ++j) 9. printf ("%d ",sol[j]); 10. printf ("\n"); 11. } 12. else 13. for (i=p+1; i<=n; ++i) |imi poate spune si mie ce face secv asta?am invatat metoda backtracking .....asta genereaza 14. { |toate multimile?:-/ si m-u reprezinta numarul de elem luate cate k? 15. sol[k]=i; | 16. back (k+1,m,i); | 17. } 18. } 19. int main() 20. { 21. freopen("combinari.in","r",stdin); 22. freopen("combinari.out","w",stdout); 23. scanf("%d%d",&n,&m); 24. back (1,m,0); 25. return 0; 26. }
Editat de admin: Foloseste tagul "code" cand postezi cod.
|
|
« Ultima modificare: Martie 16, 2009, 22:03:02 de către Andrei Grigorean »
|
Memorat
|
|
|
|
•cr1st18
Strain
Karma: 1
Deconectat
Mesaje: 39
|
 |
« Răspunde #16 : Martie 16, 2009, 21:36:10 » |
|
m-am cam prins multumesc oricum 
|
|
|
Memorat
|
|
|
|
•miculprogramator
|
 |
« Răspunde #17 : Iulie 22, 2009, 22:51:00 » |
|
Asta nu se poate face cu next_permutatios si prev_permutation ? 
|
|
|
Memorat
|
|
|
|
•marcelcodrea
|
 |
« Răspunde #18 : Iulie 22, 2009, 23:30:13 » |
|
Permutarile sunt diferite de combinari, deci nu prea le poti gasi cu next_permutation si prev_permutation. Dar intrebarea asta putea sa fie pusa si in topicul de permutari. Eu cred ca e util pentru elevi sa inteleaga ideea din spatele algoritmului, nu doar sa il apeleze. Ca offtopic : STL va putea fi de acum folosit si la judeteana, eu l-as interzice la concursurile de liceu, indiferent de faza, pentru ca in opinia mea ideea nu e sa inveti cum sa folosesti o librarie de functii optim-implementate(asta se poate invata si la facultate), ci sa implementezi de mana algoritmii. Am fost si sunt un sustinator al introducerii gcc la toate fazele olimpiadelor, insa nu cred ca ar fi dificil sa se interzica apelarea STL-ului in surse si astfel sa se testeze capacitatea olimpicului de a proiecta structuri si a implementa de mana algoritmii care lucreaza cu ele. L.E.(Ca sa nu perpetuez un offtopic): Cred ca ai dreptate, wefgef, insa doar daca ne gandim la faza nationala si mai sus de atat. La faza locala sau judeteana nu putem vorbi de o majoritate de olimpici "cu pretentii", asa cum ai formulat si cred ca STL-ul va dauna. 
|
|
« Ultima modificare: Iulie 23, 2009, 23:03:52 de către Codrea Marcel »
|
Memorat
|
Imperiile coloniale au murit... Germania Nazistä a murit... Uniunea Sovieticä a murit... Si nici Uniunea Europeanä nu se simte prea bine
|
|
|
•wefgef
|
 |
« Răspunde #19 : Iulie 22, 2009, 23:42:59 » |
|
Orice olimpic cu pretentii stie sa implementeze tot ceea ce foloseste din STL (cu mici exceptii, gen seturi). Olimpiada este un concurs in care accentul ar trebui sa se puna pe gasirea ideilor din spatele problemelor, nu pe implementarea unor algoritmi arhicunoscuti. Intr-adevar, pentru elevii mai slabi care nu stiu sa scrie o cautare binara poate ca reprezinta un mare avantaj STL-ul, dar pentru olimpicii de top e vorba doar de a castiga timp la implementare - ceea ce mi se pare foarte in regula. E stupid ca intr-o proba de concurs de 5 ore sa stai sa scrii sortarea de mana de 3 ori. Sa implementezi niste algoritmi vechi de zeci de ani pe care toata lumea ii cunoaste nu ar trebui sa reprezinte scopul vreunui concurs, ca sa nu mai vorbim de olimpiada 
|
|
|
Memorat
|
omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
|
|
|
•alexandru92
|
 |
« Răspunde #20 : Noiembrie 28, 2009, 18:27:04 » |
|
|
|
|
Memorat
|
|
|
|
•andunhill
|
 |
« Răspunde #21 : Aprilie 20, 2010, 16:24:11 » |
|
Am si eu o intrebare daca se poate. Pe exemplul dat mie imi scrie in fisier urmatoarele: 1 2 3 1 2 4 1 3 2 1 3 4 1 4 2 1 4 3 2 1 3 2 1 4 2 3 1 2 3 4 2 4 1 2 4 3 3 1 2 3 1 4 3 2 1 3 2 4 3 4 1 3 4 2 4 1 2 4 1 3 4 2 1 4 2 3 4 3 1 4 3 2 Total diferit de raspunsul din exemplu. Si totusi am luat 100 pt. Imi poate explica si mie cineva?
|
|
« Ultima modificare: Aprilie 20, 2010, 17:05:42 de către Sima Cotizo »
|
Memorat
|
|
|
|
•dornescuvlad
|
 |
« Răspunde #22 : Aprilie 20, 2010, 16:45:26 » |
|
Tu ai generat de fapt aranjamente in ordine lexicografica, nu combinari. Tocmai am rulat sursa ta de 100 puncte si afiseaza ce trebuie 
|
|
|
Memorat
|
|
|
|
•andunhill
|
 |
« Răspunde #23 : Aprilie 21, 2010, 20:21:56 » |
|
Bun dar tot nu inteleg de ce nu imi afiseaza ca in enunt.
|
|
|
Memorat
|
|
|
|
•SpiderMan
|
 |
« Răspunde #24 : Aprilie 21, 2010, 20:24:28 » |
|
Eu am rulat sursa ta, si arata cum trebuie, probabil ai modificat ceva si ai uitat sa compilezi sau ... nu stiu 
|
|
|
Memorat
|
|
|
|
|