Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: 661 Reteta  (Citit de 6710 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
DITzoneC
Nu mai tace
*****

Karma: 301
Deconectat Deconectat

Mesaje: 962



Vezi Profilul
« : Februarie 22, 2008, 13:34:05 »

Aici puteţi discuta despre problema Reteta.
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #1 : Februarie 23, 2008, 11:38:52 »

sunt cumva testele oficiale de la ONI? k parca pe testu 2 apare o reteta cu medicamentu 13 desi sunt doar 10 medicamente... si nu-mi dau seama dc busesc 3 teste.. desi sursa pare total ok Fighting
Memorat
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #2 : Februarie 23, 2008, 11:41:12 »

Banuiesc ca s-au pastrat testele oficiale.. Testul nr. 1 e asta:

Cod:

10 9
2 3 1 4 6
2 4 2 3 8 9
1 3 5 7 10
1 4 2 4 6 8
1 5 1 3 5 7 9
1 1 10
2 4 2 3 5 9
2 5 4 7 8 10 13
2 6 2 1 3 5 6 7
10 2 5 8 3 10 3 10 10 3


Daca ne uitam cu atentie la a8a reteta, observam ca avem medicamentul 13, care nu exista (fiind doar 10, n=10).
Deci ar fi incalcat enuntul care spune:

Cod:
apoi q numere distincte din multimea { 1, 2, ..., n } reprezentand medicamentele inscrise pe acea reteta;

Deci 13, nu se afla in multimea {1,2, ... ,10}.

In .ok este 36.5. Sursa mea scoate 36.0. Si mie se pare corect, daca nu as lua in seama 13-ele ala. Se obtine cost minim prin alegerea retelor 1,7,8, platind 14,10, respectiv 12 =>total: 36.0

E adevarat ca s-au luat punctaje de 100, dar pe testul asta cum s-ar se obtine 36.5? Si de ce nu e 36.0? De asemenea, ce cauta 13-ele ala acolo? Multumesc anticipat!

                                                                        Florian  Thumb up
Memorat
gabitzish1
Moderatori infoarena
Nu mai tace
*****

Karma: 321
Deconectat Deconectat

Mesaje: 926



Vezi Profilul
« Răspunde #3 : Februarie 23, 2008, 11:49:02 »

36.5 se obtine din primele trei retete : {1,4,6} = 14 ; {2,3,8,9} = 13,5 ; {5,7,10} = 9.
 14 + 13.5 + 9 = 36.5.
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #4 : Februarie 23, 2008, 11:55:23 »

ma rog... acu mia-m dat seama ca erau gresite testele la oni:)) si chiar ma miram atunci cum de luasem doar 70 de puncte Fighting dar e ciudat cum unii cu surse gresite au 100... trebea sa se faca o recorectare... + ca sursa lor ia 100 Smile)

si mie imi da tot 36.0 pe testu 1
Memorat
gabitzish1
Moderatori infoarena
Nu mai tace
*****

Karma: 321
Deconectat Deconectat

Mesaje: 926



Vezi Profilul
« Răspunde #5 : Februarie 23, 2008, 12:00:07 »

Nu cred ca sursele celor care au luat 100 sunt gresite. Sursa mea, de exemplu, numara medicamentele alese si compara suma formata cu maximul doar cand nr_medicamente == n. Pentru testul postat mai sus, nu scoate suma 36.0 pentru ca sunt prea multe medicamente in cazul retelelor 1, 7, 8 (nr_medicamente > n).
Testul e cu siguranta gresit din moment ce e specificat in enunt ca medicamentele inscrise pe reteta sunt de la 1 la n. Nu trebuia sa se intample asta la ONI.
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #6 : Februarie 23, 2008, 12:04:29 »

si eu fac la fel si verific daca exista toate medicamentele... daca exista atunci verific:

if  (suma<min)
     min=suma;

pe testu unu imi da:

36.0 (costul minim)
1,tip=2 :(1,10) (4,8) (6,10) (1 reprez nr retetei , tipul 2 si valorile din paranteze: prima nr medicamentului si a doua costul acestuia pe fiecare medicament)
7,tip=2 :(2,2) (3,5) (5,3) (9,10)
8,tip=2 :(4,8) (7,3) (8,10) (10,3) (13,0)
Memorat
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #7 : Februarie 23, 2008, 12:06:38 »

Sursa mea, de exemplu, numara medicamentele alese si compara suma formata cu maximul doar cand nr_medicamente == n.

Eu verific ca toate cele n sa fie alese. Deci, in mod normal nu ar trebui sa fie gresita verificarea mea. Doar ca e din cauza testelor...
Memorat
gabitzish1
Moderatori infoarena
Nu mai tace
*****

Karma: 321
Deconectat Deconectat

Mesaje: 926



Vezi Profilul
« Răspunde #8 : Februarie 23, 2008, 12:37:22 »

si eu fac la fel si verific daca exista toate medicamentele... daca exista atunci verific:

if  (suma<min)
     min=suma;

pe testu unu imi da:

36.0 (costul minim)
1,tip=2 :(1,10) (4,8) (6,10) (1 reprez nr retetei , tipul 2 si valorile din paranteze: prima nr medicamentului si a doua costul acestuia pe fiecare medicament)
7,tip=2 :(2,2) (3,5) (5,3) (9,10)
8,tip=2 :(4,8) (7,3) (8,10) (10,3) (13,0)


Citat
Cerinta

Scrieti un program care sa determine suma minima de bani necesara pentru a cumpara exact cate unul din fiecare dintre cele n medicamente, folosindu-se de retetele avute la dispozitie.
Tu verifici daca ai EXACT cate un medicament ??  Huh  retetele 1 si 8 au amandoua medicamentul 4, de aia nu e bun raspunsul tau(facand abstractie de medicamentul 13).
« Ultima modificare: Februarie 23, 2008, 12:47:26 de către Bitis Gabriel » Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #9 : Februarie 23, 2008, 14:00:02 »

da ai dreptate:D  Whistle
Memorat
raduzer
Client obisnuit
**

Karma: 62
Deconectat Deconectat

Mesaje: 71



Vezi Profilul
« Răspunde #10 : Februarie 24, 2008, 10:40:24 »

Am schimbat memoria sa fie la fel ca la ONIsi sursele se va face reevaluare. In legatura cu testul gresit am sa ma uit pe el si il voi schimba.
Memorat
INSiDe
Strain


Karma: 2
Deconectat Deconectat

Mesaje: 12



Vezi Profilul
« Răspunde #11 : Februarie 25, 2008, 17:14:14 »

user.cpp:20: error: invalid types 'int [21][float]' for array subscript
user.cpp:55: error: invalid types 'int [20][float]' for array subscript

Primesc eraorea asta la complilare si nu imi dau seama de la ce vine .. imi puteti spun si mie va rog? Very Happy
Memorat
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #12 : Februarie 25, 2008, 17:16:30 »

Probabil apelezi o matrice cu a[ x ][ y ], iar y e de tip float.  Ok Uita-te pe linia 20 si linia 55.
« Ultima modificare: Februarie 25, 2008, 19:34:16 de către Bogdan Tataroiu » Memorat
INSiDe
Strain


Karma: 2
Deconectat Deconectat

Mesaje: 12



Vezi Profilul
« Răspunde #13 : Februarie 25, 2008, 23:07:27 »

m-am uitat pe sursa .. si intradevar era o matrice a [ x ] [ y ] unde y era declarat ca 'float' insa avea valoarea unui nr natural fara zecimale. aceasta problema ne-a fost data la sc si atat am putut sa fac in limita timpului. profesoara nu a stiut sa corecteze problema si mi-a zis sa caut pe net surse de erori posibile la sursa mea..

Cod:
#include <fstream.h>
int main()
{float r[20][30],s,v[200][30];
 int n,m,i,j,p[21],poz,poz2,k,x2,min,max,gasit,aux[20],x3;
 ifstream f("reteta.in");
 ofstream g("reteta.out");
 f>>n; f>>m;
 for (i=1;i<=m;i++)
    {f>>r[i][1]>>r[i][2];
     for(j=3; j<=r[i][2]+2; j++)
       f>>r[i][j]; }
 for (i=1; i<=n; i++)
   f>>p[i];
       //citiri

 for (i=1; i<=m;i++)
  {s=0;
   for(j=3; j<=r[i][2]+3; j++)
    {x2 = r[i] [j];
      s = s + p[x2];}
   if (r [ i ] [1]==1)
    r [ i ] [ 0 ] = s;
   else
    r [ 1 ] [ 0 ] = s / 2;}   // calculam valoarea fiecarei retete

 poz=1;
 for(i=m;i>=1;i--)
  {j=1;
   while (i+j<=m+1)
    {poz2=2;
     v[poz][1]=i;
     for (k=j; k<=i+j-1; k++)
       {v[poz][0]=v[poz][0] + r[k][0];
v[poz][poz2]=k;
poz2++;}
     j++;poz++;}}  // aflam valoarea tuturor combinatiilor de retete posibile


 max=1;
 for (i=1;i<=n;i++)
   max=max+p[i];

 gasit=0;
 while (gasit==0)
  { min=max;poz2=0;
    for(i=1;i<=poz-1; i++)
     if (min > v [ i ] [ 0 ] )
      {min = v [ i ] [ 0 ];
       poz2=i;}               //gasim pretul minim din retetele gasite
    for(i=1;i<=n;i++)
       aux[i]=0;
    for(i=2;i<=v[poz][1];i++)
      {x2=v[poz2][i];
       for (j=3; j<=r[x2][2]+3; j++)
  {x3=r[x2][j];
   aux[x3]=1;}}
    gasit=1;
    for(i=1;i<=n;i++)        // verificam daca valorile gasite sunt favorabile
     if(aux[i]==0)
       gasit=0;
    if(gasit==1)
      g<<v[poz][0];         // afisare
    else
      v[poz][0]=max;
}
 f.close();
 g.close();
 return 0;
 }

V-as fi recunoscator daca mi-ati spune unde este gresala ( pt a functiona algoritmul n pt a lua 100 pct pe problema  Smile ) .mc

Editat de admin: Pentru a include cod trebuie sa folosesti tagul code, nu quote Smile.
« Ultima modificare: Februarie 25, 2008, 23:16:46 de către Andrei Grigorean » Memorat
raduzer
Client obisnuit
**

Karma: 62
Deconectat Deconectat

Mesaje: 71



Vezi Profilul
« Răspunde #14 : Februarie 26, 2008, 15:20:25 »

Testul 1 a fost modificat si s-a reevaluat problema.
Memorat
danal182001
Strain


Karma: 61
Deconectat Deconectat

Mesaje: 4



Vezi Profilul
« Răspunde #15 : Februarie 26, 2008, 22:53:34 »

Buna seara tuturor,
am aflat de problema ivita din neatentie la unul din testele de la problema reteta, clasa a 8-a.
Am verificat testul. Intradevar medicamentul 13 nu are ce cauta pe reteta respectiva. Cum n=10 si deja 4 medicamente erau plasate... in cadrul retetei, mai existau 6 variante posibile. Oricare medicament plasat nu introducea reteta in solutie, deci fisierul de iesire ramane corect.
TOATE sursele au fost reevaluate inlocuindu-se medicamentul 13 cu 9 (ales evident la intamplare din cele 6 variante). NICI unul din punctajele obtinute de concurenti nu s-a modificat.
Inchei acest mesaj cu scuzele de rigoare pentru situatia neplacuta creata si cu asigurarea ca in testele de la problemele propuse de mine nu va mai apare numarul 13...

prof Dana Lica
Memorat
nod_software
Strain


Karma: -3
Deconectat Deconectat

Mesaje: 4



Vezi Profilul
« Răspunde #16 : Octombrie 05, 2008, 16:28:40 »

   Nu erea neaparat obilgatoriu sa modificati testul 1(micuta capcana, trap), daca ati implementat-o foarte bine, va dadea bine si testul 1.

   Eu am facut-o lejer cu backtracking. Generez toate submultimile valide(suma sa fie mai mica decat minim, si sa contina o singura data toate medicamentele mai mici decat n(eu am facut un vector caracteristic, [1..20], si verificam pana la n, iar 13 este mai mare decat N, si nici nu treceam la el). Iar la sfarsit verific daca plata curenta este mai minima atunci min = plata curenta. Sper ca ati inteles...
« Ultima modificare: Octombrie 13, 2008, 21:30:41 de către Budisteanu Ionut Alexandru » Memorat
laurion
De-al casei
***

Karma: -41
Deconectat Deconectat

Mesaje: 102



Vezi Profilul
« Răspunde #17 : Martie 10, 2011, 03:10:35 »

Hmm.. pic testul 9 cu "Incorect", de ce oare?  Think
Mentionez ca folosesc o simpla generare a submultimilor(pe biti).
« Ultima modificare: Martie 11, 2011, 02:42:45 de către Laurentiu Cristian Ion » Memorat
ctlin04
Nu mai tace
*****

Karma: 23
Deconectat Deconectat

Mesaje: 207



Vezi Profilul
« Răspunde #18 : Noiembrie 01, 2011, 17:48:52 »

Imi explica si mie cineva de ce la testul de pe prima pagina se iau retetele 1,7,8, doar in cerinta scrie:
cod:
Scrieti un program care sa determine suma minima de bani necesara pentru a cumpara exact cate unul din fiecare dintre cele n medicamente, folosindu-se de retetele avute la dispozitie.
cod.
iar daca luam luam retetele respective, medicamentul 4 se repeta, sau nu am inteles eu conditia, lamuritima cineva, ca tot iau doar 30 puncte cu incorect pe celelalte, desi inca nu am gasit vre-un test la care programul sa-mi dea raspuns gresit, cred ca pentru testul din comentarii raspunsul e totusi 36.5, nu?? Brick wall Confused

LE:S-a rezolvat pina la urma, totusi am inteles corect conditia  Dancing
« Ultima modificare: Noiembrie 01, 2011, 17:56:50 de către catalin » Memorat
DevilShadow
Strain


Karma: 2
Deconectat Deconectat

Mesaje: 18



Vezi Profilul
« Răspunde #19 : Februarie 13, 2012, 23:11:45 »

Ce ciudat... am trimis o sursa si mi-a dat corect la testul 8, am trimis o alta sursa si mi-a dat corect la testul 1  Shocked
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

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