Pagini: [1] 2   În jos
  Imprimă  
Ajutor Subiect: 017 Combinari  (Citit de 26923 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« : 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 Deconectat

Mesaje: 15



Vezi Profilul
« 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... Think 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 Deconectat

Mesaje: 87



Vezi Profilul
« Răspunde #2 : Martie 11, 2008, 11:40:14 »

Am vazut ca in sursa ta tot faci verificarea asta:
Cod:
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 Deconectat

Mesaje: 15



Vezi Profilul
« Răspunde #3 : Martie 11, 2008, 12:11:25 »

Mersi mult pentru sfaturi...am schimbat putin cck() si acum imi merge de 100...   peacefingers Ok
Memorat
sigrid
De-al casei
***

Karma: 61
Deconectat Deconectat

Mesaje: 129



Vezi Profilul
« 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... Think 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 Smile?
« Ultima modificare: Martie 11, 2008, 19:24:38 de către stanciu v maria » Memorat
MciprianM
Nu mai tace
*****

Karma: 87
Deconectat Deconectat

Mesaje: 324



Vezi Profilul
« 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 Deconectat

Mesaje: 25



Vezi Profilul
« Răspunde #6 : Martie 15, 2008, 22:23:45 »

Am vazut ca in sursa ta tot faci verificarea asta:
Cod:
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 Thumb up
Memorat
Tase_C
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 4



Vezi Profilul
« Răspunde #7 : Martie 19, 2008, 16:19:20 »

M-a necajit problema asta   Brick wall.

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
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« 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 Deconectat

Mesaje: 3



Vezi Profilul
« Răspunde #9 : Martie 22, 2008, 14:30:07 »

Cod:
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
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #10 : Martie 22, 2008, 14:42:00 »

sincer m-i se pare ca o scandura  Tongue  (de curiozitate... ai auzit de indent? ) in rest pare bine Tongue
Memorat
zuzulica
Strain


Karma: -5
Deconectat Deconectat

Mesaje: 3



Vezi Profilul
« Răspunde #11 : Martie 22, 2008, 15:09:08 »

nuj ce am de scriu as a da altfel ma incurc, culmea:)
Memorat
ciprianf
De-al casei
***

Karma: 11
Deconectat Deconectat

Mesaje: 104



Vezi Profilul
« 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 Deconectat

Mesaje: 1



Vezi Profilul
« 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
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« 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.  Ok
Memorat
cr1st18
Strain
*

Karma: 1
Deconectat Deconectat

Mesaje: 39



Vezi Profilul
« Răspunde #15 : Martie 15, 2009, 20:37:03 »

Cod:
   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 Deconectat

Mesaje: 39



Vezi Profilul
« Răspunde #16 : Martie 16, 2009, 21:36:10 »

m-am cam prins multumesc oricum Tongue
Memorat
miculprogramator
Nu mai tace
*****

Karma: 65
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #17 : Iulie 22, 2009, 22:51:00 »

Asta nu se poate face cu next_permutatios si prev_permutation ?  Confused
Memorat
marcelcodrea
Nu mai tace
*****

Karma: 173
Deconectat Deconectat

Mesaje: 217



Vezi Profilul
« 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.  Very Happy
« Ultima modificare: Iulie 23, 2009, 23:03:52 de către Codrea Marcel » Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« 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 Wink
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« Răspunde #20 : Noiembrie 28, 2009, 18:27:04 »

Desi intrebarea o sa sune ciudat, de ce merge sursa http://infoarena.ro/job_detail/369554?action=view-source  si asta nu http://infoarena.ro/job_detail/369556?action=view-source Eh? .
Ambele il au pe k neinitializat.
Memorat
andunhill
Vorbaret
****

Karma: 12
Deconectat Deconectat

Mesaje: 183



Vezi Profilul
« 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
Cod:
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
Nu mai tace
*****

Karma: -138
Deconectat Deconectat

Mesaje: 234



Vezi Profilul
« 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  Rolling on the Floor Laughing
Memorat
andunhill
Vorbaret
****

Karma: 12
Deconectat Deconectat

Mesaje: 183



Vezi Profilul
« Răspunde #23 : Aprilie 21, 2010, 20:21:56 »

Bun dar tot nu inteleg de ce nu imi afiseaza ca in enunt.
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« 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  wink
Memorat
Pagini: [1] 2   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines