Pagini: 1 [2] 3 4   În jos
  Imprimă  
Ajutor Subiect: 036 Cutii  (Citit de 22926 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Cosmin
Echipa infoarena
Nu mai tace
*****

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #25 : Martie 24, 2005, 13:33:24 »

TYTUS: Nu am cartea la mine si nici codul la o problema care am rezolvat-o in O(n log n) nu l-am mai gasit, oricum dupa ONI probabil va aparea un articol pe tema asta pe info.devnet. Pana atunci poti sa citesti ideea din linkul asta: http://www.answers.com/main/ntquery;jsessionid=fa1iqujmfas8?method=4&dsid=2222&dekey=Patience+sorting&gwp=8&curtab=2222_1&sbid=lc02b
Memorat
Dark_Raxvan
Strain


Karma: -14
Deconectat Deconectat

Mesaje: 13



Vezi Profilul
« Răspunde #26 : Mai 19, 2005, 20:39:07 »

Am o rezolvare care foloseste clase de obiecte si nu pot sa o valorific deoarece evaluatorul nu suporta. Ce sa fac k sa imi pastrez rezolvarea si sa fac sa mearga.
In acesta clasa redefinesc operatorii tocmai cauza erori.
Memorat
cavendish
Strain
*

Karma: 2
Deconectat Deconectat

Mesaje: 43



Vezi Profilul WWW
« Răspunde #27 : Mai 19, 2005, 22:00:10 »

evaluatorul suporta clase. ai grija cand trimiti rezolvarea sa pui 'c++' ... daca nu asta e problema, inseamna ca nu ai scris cod bun.
Memorat
vladut.forum
Vizitator
« Răspunde #28 : August 30, 2005, 18:11:24 »

Memorat
Dorin
Client obisnuit
**

Karma: 7
Deconectat Deconectat

Mesaje: 73



Vezi Profilul
« Răspunde #29 : Septembrie 01, 2005, 09:22:13 »

da bineinteles ca este subsir maximal si eu asa am rezolvato si am luat 100 p
Memorat

Smile ! Smile ... tomorow will be worse
Cosmin
Echipa infoarena
Nu mai tace
*****

Karma: 351
Deconectat Deconectat

Mesaje: 1.799



Vezi Profilul
« Răspunde #30 : Septembrie 01, 2005, 09:45:19 »

vladut cred ca nu ai inteles ce se discuta mai sus ....
Memorat
nivan
Vizitator
« Răspunde #31 : Octombrie 11, 2005, 20:10:25 »

Uite de ce nu merge asta: Fac problema pe principiul subsirului crescator maximal, doar ca consider un numar mai mare ca altul dak poa sa intre o cutie in alta. Nu merge nu stiu de ce. Mie pe comp imi da bine.

Uite si sursa dak te ajuta:
Cod:

#include <stdio.h>

long int gasit,i,nicu,j,n,m,l[3502],L[3502],h[3502],v[3502],x;

void quick(long int li, long int ls)
{
 long int i,j,x,y;
 i=li; j=ls; x=v[(li+ls)/2];
 while (i<=j)
      {
       while (v[i]>x) i++;
       while (v[j]<x) j--;
       if (i<=j)
{
 y=v[i]; v[i]=v[j]; v[j]=y;
 y=l[i]; l[i]=l[j]; l[j]=y;
 y=L[i]; L[i]=L[j]; L[j]=y;
 y=h[i]; h[i]=h[j]; h[j]=y;
 i++; j--;
}
      }
 if (i<ls) quick(i,ls);
 if (j>li) quick(li,j);
}

int intra(long int i, long int j)
{
 long int gasit=1;
 if (l[i]>l[j] && L[i]>L[j] && h[i]>h[j])
   gasit=0;
 return gasit;
}

int main()
{
 FILE *g=fopen("cutii.out","w");
 FILE *f=fopen("cutii.in","r");
 fscanf(f,"%ld %ld",&n,&m);
 for (nicu=1;nicu<=m;nicu++)
    {
 for (i=1;i<=n;i++)
    fscanf(f,"%ld %ld %ld",&l[i],&L[i],&h[i]);

 for (i=1;i<=n;i++)
    v[i]=l[i]*L[i]*h[i];

 quick(1,n);

 for (i=1;i<=n+2;i++)
    v[i]=0;
 v[n]=1;
 long int max=0;
 for (i=n-1;i>=1;i--)
    {
     max=0;
     for (j=i+1;j<=n;j++)
if (v[j]>=max && intra(i,j)==0)
 {
  max=v[j];
  break;
 }
     v[i]=max+1;
    }

 max=0;
 for (i=1;i<=n;i++)
    if (max<=v[i])
      max=v[i];

 fprintf(g,"%ld",max);
 }
 fclose(f);
 fclose(g);
 return 0;
}

Destul de lunga sursa da' va rog sa o examianti poate imi spuneti si mie ce are.

Editat de moderator: Cand postezi cod apasa si tu butonul "Code" Tongue sa se pastreze indentarea
Memorat
nivan
Vizitator
« Răspunde #32 : Octombrie 11, 2005, 20:20:09 »

Cosmine eu am cautat cartea in lung si lat si nu am gasit O(n log n) pt. subsir cescator maximal. Te rog sa-mi zici si mie pagina la care se afla.
Memorat
u-92
Vizitator
« Răspunde #33 : Octombrie 11, 2005, 21:04:27 »

din cate am vazut ai facut subsir crescator in O(n^2) (care se pare ca intra in timp).. dar poti sa implementezi solutia cu AIB (gasesti hinturi mai sus, este si un articol in ginfo).. si implementarea la subsir in n*lgn trebuie sa o cauti mai bine in ultimul capitol, nu-s chiar asa de multe probleme, o poti gasi relativ usor  Very Happy
Memorat
danube
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« Răspunde #34 : Octombrie 25, 2005, 18:14:25 »

Am citit mesajele, si am scos o solutie, as zice eu combinata  Smile

Am sortat cutiile dupa z (sa zicem, ca vad ca va place, desi merge dupa oricare din cele 3 dimensiuni, duh ...). Pentru incadrare in timp, sortare liniara
Parcurgand sirul ordonat dupa z, de la cea mai mica la cea mai mare, am folosit programare dinamica: astfel, best = numarul maxim de cutii care pot fi continute in cutia i.
din pacate nici asa nu am prins toate testele (TLE)...
pentru o si mai buna optimizare cutiile tratate deja le-am retinut intr-o lista liniara, in ordinea numarului de subcutii continute.
merge... timpi buni (sub 4 sec/test);
Memorat
nivan
Vizitator
« Răspunde #35 : Noiembrie 09, 2005, 13:27:03 »

Mei yo pot sa bag o cuite in pzitia L h l  in o cutie mai mare care sta in pzitia h L l?Huh   Adica trebuie sa le bag astefl incat lungimea mica sa orespunda cu lungimea mare, Latimea mica cu latimea mare shi inaltimea mica cu cea mare.....  Sau pot sa bag o cutie in alta cutie cum vreau eu doar sa mearga.....   Brick wall  aci cred ca am o problema.... Oricum fac cu subsir crescator in O(n2) shi iau WA. Asa ca nici n-are rost ca incerc in O(n log n) cum mi s-a sugerat mai sus.
Memorat
nivan
Vizitator
« Răspunde #36 : Noiembrie 09, 2005, 13:29:49 »

Eu iau doar 10 puncte la rpoblema asta.... Ceea ce imi pare k e ciudat.
Memorat
u-92
Vizitator
« Răspunde #37 : Noiembrie 09, 2005, 14:15:46 »

eu zic ca ai gresit implementarea.. poti sa bagi cutia A in cutia B daca xA < xB, yA < yB, zA < zB.. ps: vad ca s-a modificat timpu` la 7 secunde, inainte parca era 9, nu prea cred ca mai intra acum n^2
Memorat
nivan
Vizitator
« Răspunde #38 : Noiembrie 09, 2005, 19:51:24 »

mda    Brick wall
Memorat
Adriana_S
De-al casei
***

Karma: 51
Deconectat Deconectat

Mesaje: 145



Vezi Profilul
« Răspunde #39 : Noiembrie 13, 2005, 13:54:56 »

Citat din mesajul lui: nivan
Cosmine eu am cautat cartea in lung si lat si nu am gasit O(n log n) pt. subsir cescator maximal. Te rog sa-mi zici si mie pagina la care se afla.

pagina 160 Very Happy in plus, merge si cu subsiru in n(n-1)/2 si un quicksort. Eu am luat 100 asa.
Memorat

nivan
Vizitator
« Răspunde #40 : Noiembrie 14, 2005, 15:11:46 »

mda.... mersi ca mi-ai zis ca nu stiam (In primul rand problema mea nu e cu complexiatatea.. sau poate e dar nu asta e majora... ci faptul ca ia wrong answer sau cine stie ce ia ca e destul de complicat de descfifrat ce scrie acolo ... eu inteleg ca iau WA dar e posibil sa fie shi alte erori ca e destul de ciudat ce scrie)
Memorat
u-92
Vizitator
« Răspunde #41 : Noiembrie 14, 2005, 15:51:34 »

"erai aproape dar ai gafat" sau "belea.. ai gresit la greu" inseamna WA Smile
cel mai bine refa codul.. (btw sper ca nu il folosesti pe cel postat mai sus, am obs. cateva chestii dubioase la sortare si la subsir)
Memorat
nivan
Vizitator
« Răspunde #42 : Noiembrie 14, 2005, 16:05:55 »

Pei cu exceptia ca e facuta in O(n^2). Nu prea e nimik dubios. Dak nu intra in timp ... il refac in O(n log n). Care sunt acele chestii dubioase?
Memorat
u-92
Vizitator
« Răspunde #43 : Noiembrie 14, 2005, 16:17:58 »

hmm.. ce e cu vectorul v si de ce te opresti la subsir crescator la prima cutia "buna" gasita?
Memorat
Adriana_S
De-al casei
***

Karma: 51
Deconectat Deconectat

Mesaje: 145



Vezi Profilul
« Răspunde #44 : Noiembrie 14, 2005, 19:29:15 »

pai in vectorul v tine lungimea subsirurilor gasite pana acum, dar intr-adevar, ar trebui sa caute toate subsirurile din care poate face parte cutia curenta, si sal ia pe cel mai mare. Nu sa se opreasca la primul. Cu alte cuvinte trebuie scos break-ul ala de acolo.
Memorat

u-92
Vizitator
« Răspunde #45 : Noiembrie 14, 2005, 20:27:52 »

eu ma refeream la faptul ca sortarea nu e buna (la inceput pune in v produsul dimensiunilor)
Memorat
Adriana_S
De-al casei
***

Karma: 51
Deconectat Deconectat

Mesaje: 145



Vezi Profilul
« Răspunde #46 : Noiembrie 14, 2005, 21:53:19 »

sorry, nu m-am uitat decat la cum face subsirul nu si la sortare. Oricum amandoua nu sunt bune Tongue
Memorat

filipb
Nu mai tace
*****

Karma: 232
Deconectat Deconectat

Mesaje: 929



Vezi Profilul
« Răspunde #47 : Noiembrie 14, 2005, 21:56:23 »

Bai omule, tu vrei mura-n gura? Silenced Ce ar fi si eu sa postez o sursa de 200 de linii si sa rog pe cineva sa mi-o corecteze? Si dupa aia sa mai postez si vreo N-spe mesaje cu ce cred eu k e gresit sau nu e! Refa sursa aia, ce mare chestie sa implementezi un subsir crescator maximal? Annoyed  

                                           bubbleSORT
Memorat
nivan
Vizitator
« Răspunde #48 : Noiembrie 15, 2005, 13:59:46 »

Mersi ca mi-ai dat idee.... doar ca nu cred ca problema e de implementare ci de idee.
Scuze era de implementare... tocmai am citit ce a scris Adriana_S mai sus si mi-am dat seama.

mda... la inceput sortez dupa volum (apoi incep sa fac subsirul crescator).

Aici era greseala.... acum am luat 100 puncte !!!!!! Acum imi dau seama ca am fost idiot Brick wall   e posibil ca o cutie cu volum mai mic ca alta sa nu poata intra in ea !!!!  Acum am sortat dupa una din dimensiuni (nu conteza care).  Nu shtiu cum de nu mi-am dat seama mai devreme  Embarassed

P.S.  Era gresit shi break-ul ala.... care nu mi-as fi dat seama (eu am crezut ca optimizez la timp.. dar din contra greseam la cursul algoritmului). Eh important e ca acum m-am prins.
Ah, shi vad ca a intrat in timp in O(n^2)... deci nu ma mai chinui cu O(n log n).
Memorat
tudalex
Strain
*

Karma: -8
Deconectat Deconectat

Mesaje: 44



Vezi Profilul
« Răspunde #49 : Februarie 04, 2006, 18:37:21 »

Cod:
#include <stdio.h>
#include <stdlib.h>
FILE *f,*o;
int x[3502],y[3502],z[3502],q[3502],n,m,l,j,i,g,k,p;

int intra(int i,int j)
{
 return x[i]<x[j] && y[i]<y[j] && z[i]<z[j];
}

int main()
{
 f=fopen("cutii.in","r+");
 o=fopen("cutii.out","w+");
 fscanf(f,"%ld %ld",&n,&m);
 for (j=1;j<=m;j++)
 {
  p=0;
  for (i=1;i<=n;i++) fscanf(f,"%ld %ld %ld",&x[i],&y[i],&z[i]);
  for (i=1;i<=n;i++)
  {
   g=0;
   for (k=1;k<p;k++)
    if (!intra(q[k],i) && intra(i,q[k]+1)) { g=1; q[k]=i;}
   if (!g && intra(q[p],i)) { p++; q[p]=i;}
  }
  fprintf(o,"%ld\n",p);
 }
 fclose(f);
 fclose(o);
 return 0;
}

Imi poate explica si mie cineva de ce imi da "RUN ERROR - Invalid memory reference"???am compilat-o pe linux(Fedora 4) si imi merge.
Memorat

"Doua lucruri sunt infinite: universul si prostia omeneasca, dar de prima inca nu sunt sigur" Albert Einstein
Pagini: 1 [2] 3 4   În sus
  Imprimă  
 
Schimbă forumul:  

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