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

Karma: -138
Deconectat Deconectat

Mesaje: 234



Vezi Profilul
« Răspunde #25 : Aprilie 21, 2010, 21:39:29 »

Eu am rulat sursa ta, si arata cum trebuie, probabil ai modificat ceva si ai uitat sa compilezi sau ... nu stiu  wink

nu mai tot repeta ba ce zic altii, se numeste POST HUNTING si se sanctioneaza cu ban
Memorat
blasterz
Nu mai tace
*****

Karma: 92
Deconectat Deconectat

Mesaje: 255



Vezi Profilul
« Răspunde #26 : Aprilie 21, 2010, 22:29:02 »

Permutarile sunt diferite de combinari, deci nu prea le poti gasi cu next_permutation si prev_permutation.

Se poate folosind next_permutation !

uite sursa :

http://infoarena.ro/job_detail/444889?action=view-source
Memorat
andunhill
Vorbaret
****

Karma: 12
Deconectat Deconectat

Mesaje: 183



Vezi Profilul
« Răspunde #27 : Aprilie 22, 2010, 07:44:47 »

Cred ca stiu de ce imi afiseaza asa. Eu mai am o problema cu back cu permutari si cred ca asta e cauza deoarece mie la back la permutari imi afiseaza ceva in genu. Dar nu sunt sigur.
Memorat
barneystinson
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 11



Vezi Profilul
« Răspunde #28 : August 13, 2010, 00:42:38 »

Permutarile sunt diferite de combinari, deci nu prea le poti gasi cu next_permutation si prev_permutation.

Se poate folosind next_permutation !

uite sursa :

http://infoarena.ro/job_detail/444889?action=view-source

salut, ms pt info, chiar nu ii dadeam de cap...

insa nu am inteles chiar tot.

pt exemplu n=4 k=3:

programu tau face asa:

un vector 0 0 0 1 ( i1=1,i2=2,i3=3,i4=4 nu am pus si primu 0 de indice 0 ca sa fie usor de vazut)
si face asa

0 0 0 1 printeaza de la 1 la 4 indicele termenului care nu e 0 aici fiind 1 2 3
0 0 1 0 printeaza 1 2 4
0 1 0 0 printeaza 1 3 4
1 0 0 0 iar aici am problema pt ca eu anticipam sa schimbe intre ei cei 2 de 0 din coada, desi ar fi fost o permutare identica ca a 3a si ar fi printat tot 1 3 4... de ce sare peste ea? stiu ca da rezultatul corect dar de ce face asa si cum? e prea tare next_permutation
Memorat
ionutz32
Strain


Karma: 16
Deconectat Deconectat

Mesaje: 18



Vezi Profilul
« Răspunde #29 : August 13, 2010, 19:31:53 »

next_permutation tine cont doar de vectorul dat ca parametru, nu de a cata oara a fost apelat. Daca pentru sirul {0,1,0,0} nu ar schimba nimic pe motiv ca se interschimba 0-urile, programul ar intra in ciclu infinit pentru ca vectorul ar ramane mereu neschimbat.

next_permutation genereaza urmatoarea permutare distincta.
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #30 : August 13, 2010, 19:38:44 »

http://wordaligned.org/articles/next-permutation

Poti vedea cum e implementata functia in C++.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
barneystinson
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 11



Vezi Profilul
« Răspunde #31 : August 14, 2010, 01:14:03 »

ms frumos, nu prea stiam eu ce sunt permutarile. am cautat si acum inteleg. ms din nou
Memorat
judgment7
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« Răspunde #32 : Martie 02, 2011, 15:28:18 »

mda, deci dupa 2-3 ani, mai da cineva un comment aici, tineti minte "\n" face diferenta, e mai eficient decat endl se pare, pentru ca luam 80 puncte cu endl si 100 cu "\n"...mda Yahoo!
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #33 : Martie 02, 2011, 15:33:19 »

Da, dupa cum poti vedea explicat aici.
Memorat
noobakaflo
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 8



Vezi Profilul
« Răspunde #34 : Noiembrie 30, 2011, 21:39:00 »

Am vazut ca nu s-a mai raspuns de 120 de zile ,dar am zis sa incerc..
Problema o rezolvai altfel,dar ma intreb de ce pentru sursa urmatoare iau 0 puncte.Am consultat atasamentele si,pentru cel putin primele 2 teste rezultatul e corect. Ce gresesc ? Fac aranjamente,singura diferenta e in functia valid().

Cod:
 
#include<fstream>
using namespace std;
fstream f("combinari.in",ios::in);
fstream g("combinari.out",ios::out);
int n,p,st[100];


void tipar()
{
int i;
for(i=0; i<p; i++)
g<<st[i]<<" ";
g<<"\n";
}

void init(int k)
{
st[k]=0;
}

int succesor(int k)
{
if(st[k]<n)
{
st[k]++;
return 1;
}
else
return 0;
}

int valid(int k)
{
if(k>0)
        if(st[k-1]>st[k])
return 0;

return 1;
}

void back(int k)
{
if(k==n)
tipar();
else
{
init(k);
while(succesor(k))
if(valid(k))
back(k+1);
}
}

int main()
{
f>>n>>p;
back(0);

f.close(); g.close();
return 0;
}

Memorat
soriyn
Vorbaret
****

Karma: 24
Deconectat Deconectat

Mesaje: 150



Vezi Profilul
« Răspunde #35 : Noiembrie 30, 2011, 22:14:14 »

Cred ca problema ta este unde verificarea aia daca k==n. Gandeste-te ca atunci cand vor fi egale o sa afisezi fara sa mai generezi elementul de pe ultima pozitie. Incearca ceva de genu

Cod:
if(valid(k))
   if(k==n) tipar();
   else back(k+1);
Memorat
noobakaflo
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 8



Vezi Profilul
« Răspunde #36 : Decembrie 01, 2011, 12:54:46 »

^
Elementele vor fi de la 0 la n-1 in stiva,pornesc cu back(0),deci nu cred ca e de aici... Repet,la mine afiseaza ce trebuie...  Smile
Memorat
VisuianMihai
De-al casei
***

Karma: -9
Deconectat Deconectat

Mesaje: 121



Vezi Profilul
« Răspunde #37 : Ianuarie 20, 2012, 16:15:31 »

Backul e cel mai bun? Nu e mai buna o combinatorica cu recurenta c[i ][j] = c[i-1][j] + c[i-1][j-1];
c[i ][j] = numarul de combinari i luate cate j
Pardon... ma refeream la numarul de combinari ... Sad
« Ultima modificare: Ianuarie 20, 2012, 16:29:57 de către Mihai Visuian » Memorat
superman_01
Client obisnuit
**

Karma: 14
Deconectat Deconectat

Mesaje: 52



Vezi Profilul
« Răspunde #38 : Aprilie 14, 2013, 22:05:51 »

O problema destul de interesanta care se bazeaza pe combinari este Pluricex.
Memorat
metalkitten
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« Răspunde #39 : Noiembrie 21, 2013, 14:26:57 »

pentru un n=50, cam cat ar trebui sa fie timpul maxim de executie? sunt cam off-topic, dar am o tema care se bazeaza pe asta si n-ul maxim e 50... Think
Memorat
harababurel
Client obisnuit
**

Karma: 23
Deconectat Deconectat

Mesaje: 62



Vezi Profilul
« Răspunde #40 : Noiembrie 21, 2013, 16:48:24 »

In cel mai rau caz, ai de generat C(50, 25) = 126.410.606.437.752 configuratii (de ordinul 1014).
Pentru C(50, 7) = 99.884.400 ~= 100 de milioane de configuratii, procesorul meu are nevoie de 2.7 secunde, excluzand tiparirea (cu tiparire, mi se executa in 91 s).
Presupunand ca timpul de executie creste liniar in functie de numarul de operatii (nu-i chiar asa), ar trebui o limita de 3.417.036 secunde ~= 40 de zile.
Memorat
metalkitten
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« Răspunde #41 : Noiembrie 21, 2013, 17:31:11 »

multumesc  Brick wall vad eu ce fac  Aha
Memorat
Pagini: 1 [2]   În sus
  Imprimă  
 
Schimbă forumul:  

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