Pagini: [1] 2 3 4   În jos
  Imprimă  
Ajutor Subiect: 477 Alee  (Citit de 27810 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
DITzoneC
Nu mai tace
*****

Karma: 301
Deconectat Deconectat

Mesaje: 962



Vezi Profilul
« : August 14, 2007, 22:24:15 »

Aici puteţi discuta despre problema Alee.
Memorat
05_Yohn
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 13



Vezi Profilul
« Răspunde #1 : Februarie 22, 2008, 21:01:18 »

de ce nu-mi compileaza sursa?? Brick wall
Cod:
   1. {$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q-,R-,S-,T-,V+,X+}  
   2. {$M 16384,0,655360} 
   3. program lee; 
   4. const oriz:array[1..4]of shortint=(1,-1,0,0); 
   5.       vert:array[1..4]of shortint=(0,0,1,-1); 
   6. var f,g:text; 
   7.     v:array[1..175,1..175]of integer; 
   8.     modif:boolean; 
   9.     x,y,x1,y1,x2,y2,n:byte; 
  10.     m,pas,xnou,ynou,i:integer; 
  11. begin 
  12. assign(f,'alee.in'); 
  13. assign(g,'alee.out'); 
  14. reset(f); 
  15. rewrite(g); 
  16. readln(f,n,m); 
  17. for i:=1 to m do begin 
  18.     readln(f,x,y); 
  19.     v[x,y]:=-1; 
  20. end; 
  21. readln(f,x1,y1,x2,y2); 
  22. x:=1;y:=1; 
  23. modif:=true; 
  24. pas:=1; 
  25. v[x1,y1]:=pas; 
  26. while modif do begin 
  27.       modif:=false; 
  28.       for x:=1 to n do 
  29.           for y:=1 to n do 
  30.               if v[x,y]=pas then begin 
  31.                  for i:=1 to 4 do begin 
  32.                      xnou:=x+oriz[i]; 
  33.                      ynou:=y+vert[i]; 
  34.                      if (xnou in [1..n])and(ynou in [1..n]) then 
  35.                         if (v[xnou,ynou]=0)and(v[xnou,ynou]<>-1)then begin 
  36.                            v[xnou,ynou]:=pas+1; 
  37.                            modif:=true; 
  38.                         end; 
  39.                         if v[x2,y2]<>0 then begin 
  40.                            modif:=false; 
  41.                            x:=n;y:=n; 
  42.                         end; 
  43.                  end; 
  44.               end; 
  45.      pas:=pas+1; 
  46. end; 
  47. writeln(g,v[x2,y2]); 
  48. close(f);close(g); 
  49. end. 

editat de moderator: foloseste tagul "[ code ]" cand postezi cod
« Ultima modificare: Februarie 22, 2008, 22:07:25 de către Bogdan Tataroiu » Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #2 : Februarie 22, 2008, 22:14:22 »

Citat
user.fpc(41,32) Error: Illegal assignment to for-loop variable "x"
user.fpc(41,37) Error: Illegal assignment to for-loop variable "y"

Erorile de compilare sunt in general destul de clare (ca si acum). Nu ai voie sa modifici contorul intr-un for. Incearca alta data sa te descurci singur si daca chiar nu reusesti, abia atunci posteaza.
Memorat

Am zis Mr. Green
cristiprg
Strain


Karma: -2
Deconectat Deconectat

Mesaje: 23



Vezi Profilul
« Răspunde #3 : Februarie 25, 2008, 22:06:04 »

am facut problema de 90 puncte...iese din timp la un test...cum ati rezolvat-o voi?...care ati luat 100...eu am facut pur si simplu , un lee clasic... Huh
Memorat
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #4 : Februarie 25, 2008, 22:17:35 »

Lee clasic trebuie. Vezi poate iti intra in vreun ciclu infinit... Nu prea e nimic special la aceasta problema. S-au pastrat testele de la oji 2007. Deci poti sa le iei de pe olimpiada.info. Succes  Thumb up
Memorat
Tabara
Nu mai tace
*****

Karma: 20
Deconectat Deconectat

Mesaje: 216



Vezi Profilul
« Răspunde #5 : Februarie 25, 2008, 23:07:42 »

am facut problema de 90 puncte...iese din timp la un test...cum ati rezolvat-o voi?...care ati luat 100...eu am facut pur si simplu , un lee clasic... Huh
Si eu am patit la fel. Incearca sa maresti coada ... Thumb up
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #6 : Martie 23, 2008, 21:08:19 »

Sau incearca sa faci dinamic, si nu mai stres cu maritu cozii   peacefingers
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #7 : Decembrie 21, 2008, 21:37:33 »

Incearca sa mai maresti putin coada, tu ai declarat-o de exact 175*175 , si pt testele in care matricea are 175*175 elemente iese din memorie
Memorat
Pepelea_Flaviu
Client obisnuit
**

Karma: 30
Deconectat Deconectat

Mesaje: 98



Vezi Profilul
« Răspunde #8 : Decembrie 21, 2008, 21:49:50 »

cam urat sa pui sursa pe forum sa iti caute altul erorile Very Happy
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #9 : Decembrie 21, 2008, 23:00:14 »

cam urat sa pui sursa pe forum sa iti caute altul erorile Very Happy

Eh, e foarte util uneori sa fii in stare sa gasesti erorile rapid Wink. Nu stiu cat de castigat este cel care pune sursa pe forum, insa cel care gaseste bugurile cu siguranta se alege cu ceva.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
xtreme
De-al casei
***

Karma: -26
Deconectat Deconectat

Mesaje: 118



Vezi Profilul
« Răspunde #10 : Ianuarie 17, 2009, 19:04:35 »

Am o nedumerire...daca compilez sursa cu compilatorul de pe infoarena pentru C++ iau 100 in schimb primesc erori pe evaluatoru OJI(chiar crash)...dupa calculele mele am folosit  memorie statica 177*177*2+9*2+31000*2=124676 bytes=124.676 kilobytes...tinand cont ca la OJI se da 640 kilobytes>124.676 kilobytes nu cred ca am depasit memoria dispusa...unde gresesc?
Cod:
#include<iostream.h>
#include<fstream.h>

int main()
{
struct orice
{unsigned char x,y;}coada[31000];
int parc[177][177],n,m,i,j,l,c,l2,c2,nr=0;
fstream f("alee.in",ios::in),g("alee.out",ios::out);
f>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
parc[i][j]=30625;
for(i=1;i<=n;i++)
{
parc[0][i]=-1;parc[n+1][i]=-1;
parc[i][n+1]=-1;parc[i][0]=-1;
}
for(i=1;i<=m;i++)
{f>>l>>c;parc[l][c]=-1;}
f>>l>>c>>l2>>c2;
i=0;parc[l][c]=0;coada[0].x=l;coada[0].y=c;
while(i<=nr)
{
l=int(coada[i].x);c=int(coada[i].y);
if(parc[l][c]+1<parc[l+1][c])
{parc[l+1][c]=parc[l][c]+1;nr++;coada[nr].x=l+1;coada[nr].y=c;}
if(parc[l][c]+1<parc[l-1][c])
{parc[l-1][c]=parc[l][c]+1;nr++;coada[nr].x=l-1;coada[nr].y=c;}
if(parc[l][c]+1<parc[l][c+1])
{parc[l][c+1]=parc[l][c]+1;nr++;coada[nr].x=l;coada[nr].y=c+1;}
if(parc[l][c]+1<parc[l][c-1])
{parc[l][c-1]=parc[l][c]+1;nr++;coada[nr].x=l;coada[nr].y=c-1;}
i++;
}
g<<parc[l2][c2]+1;
f.close();g.close();return 0;
}
                                                                                                 
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #11 : Ianuarie 18, 2009, 18:12:44 »

Tu aloci pe stiva (in interiorul functiilor). Scoate toate variabilele mari in afara functiei main() si iti va merge.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
xtreme
De-al casei
***

Karma: -26
Deconectat Deconectat

Mesaje: 118



Vezi Profilul
« Răspunde #12 : Ianuarie 18, 2009, 19:52:00 »

Tu aloci pe stiva (in interiorul functiilor). Scoate toate variabilele mari in afara functiei main() si iti va merge.
am scos "structura orice" in afara mainului.Asa aloc static (31000*2)=62000<64000(limita) bytes(coada) in stiva(in functia main) aloc (9(variabile)+177*177(matricea parc))*2=62676<65520  bytes.....si tot imi da abnormal program termination...de ce?
Cod:
#include<iostream.h>
#include<fstream.h>

struct orice
{unsigned char x,y;}coada[31000];


int main()
{
int n,m,i,j,l,c,l2,c2,nr=0,parc[177][177];
fstream f("alee.in",ios::in),g("alee.out",ios::out);
f>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
parc[i][j]=30625;
for(i=1;i<=n;i++)
{
parc[0][i]=-1;parc[n+1][i]=-1;
parc[i][n+1]=-1;parc[i][0]=-1;
}
for(i=1;i<=m;i++)
{f>>l>>c;parc[l][c]=-1;}
f>>l>>c>>l2>>c2;
i=0;parc[l][c]=0;coada[0].x=l;coada[0].y=c;
while(i<=nr)
{
l=int(coada[i].x);c=int(coada[i].y);
if(parc[l][c]+1<parc[l+1][c])
{parc[l+1][c]=parc[l][c]+1;nr++;coada[nr].x=l+1;coada[nr].y=c;}
if(parc[l][c]+1<parc[l-1][c])
{parc[l-1][c]=parc[l][c]+1;nr++;coada[nr].x=l-1;coada[nr].y=c;}
if(parc[l][c]+1<parc[l][c+1])
{parc[l][c+1]=parc[l][c]+1;nr++;coada[nr].x=l;coada[nr].y=c+1;}
if(parc[l][c]+1<parc[l][c-1])
{parc[l][c-1]=parc[l][c]+1;nr++;coada[nr].x=l;coada[nr].y=c-1;}
i++;
}
g<<parc[l2][c2]+1;
f.close();g.close();return 0;
}
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #13 : Ianuarie 18, 2009, 22:06:43 »

Pe Borland sunt teoretic 640 de kb, dar nu poti avea acces la toata memoria decat lucrand cu pointeri. Incearca sa gasesti o solutie mai simpla. Eu nu folosesc decat 16 kb de memorie pe majoritatea testelor, doar pe testul maxim folosesc 288 kb.

Scoate matricea parc din main. Ocupa 177 * 177 * 2 ~= 62 de kb daca e in main si spargi stiva.

Spor Smile
Memorat
xtreme
De-al casei
***

Karma: -26
Deconectat Deconectat

Mesaje: 118



Vezi Profilul
« Răspunde #14 : Ianuarie 18, 2009, 22:49:00 »

Pe Borland sunt teoretic 640 de kb, dar nu poti avea acces la toata memoria decat lucrand cu pointeri. Incearca sa gasesti o solutie mai simpla. Eu nu folosesc decat 16 kb de memorie pe majoritatea testelor, doar pe testul maxim folosesc 288 kb.

Scoate matricea parc din main. Ocupa 177 * 177 * 2 ~= 62 de kb daca e in main si spargi stiva.

Spor Smile
vrei sa zici ca,compilatorul Borland C(care daca nu gresesc este compilatorul lui Borland C++ 3.1 si care e la OJI pt limabju de programare C++) dispune de 640 KB(KB-kilobytes,Kb-kilobits)?eu stiam ca pentru datele alocate static dispun de 64 Kilobytes,pentru stiva maxim 65 Kilobytes iar pentru heap 655 kilobytes pe compilatorul de mai sus...eu problema am rezolvat-o(compiland-o cu g++,gcc) dar pe mine ma intereseaza de ce nu pot aloca memoria respectiva cu compilatorul Borland C...in care zona pun prea mult?....problema se rezolva cu un Lee clasic...singura optimizare la problema aceasta ar fi sa implementez coada dinamic...inca ceva pe stiva ai 65 Kilobytes,de ce sa se sparga la 62 kilobytes?....daka pun coada statica si restu pe stiva(in main) tot abnormal program termination imi da...
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #15 : Ianuarie 19, 2009, 10:53:17 »

Incearca sa implementezi coada dinamic si scapi de probleme. Daca nu ma insel asa era implementata si in sursa oficiala.

Spor Smile
Memorat
xtreme
De-al casei
***

Karma: -26
Deconectat Deconectat

Mesaje: 118



Vezi Profilul
« Răspunde #16 : Ianuarie 21, 2009, 23:22:52 »

Incearca sa implementezi coada dinamic si scapi de probleme. Daca nu ma insel asa era implementata si in sursa oficiala.

Spor Smile
In sursa oficiala a fost implementata coada static si in C,nu in C++(de aceea pt ca nu se poate face cu alocare statica in C++).
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #17 : Ianuarie 22, 2009, 16:03:49 »

Cum adica a fost implementata in C nu in C++? Se aloca EXACT la fel static in C ca in C++. La alocarea dinamica e diferit.
Memorat
xtreme
De-al casei
***

Karma: -26
Deconectat Deconectat

Mesaje: 118



Vezi Profilul
« Răspunde #18 : Ianuarie 22, 2009, 16:49:15 »

Cum adica a fost implementata in C nu in C++? Se aloca EXACT la fel static in C ca in C++. La alocarea dinamica e diferit.
nu cunosc prea multe in C...mai mult cunosc C++..am observat ca la solutii(olimpiade) in general le rezolva in C daka sunt probleme la implementare(de genu memorie) si in rest in c++(poate gresesc)...oricum,dupa cat am intors problema nu cred ca se poate face  cu compilatorul Borland C si cu limbajul c++ cu alocare statica a cozii... ba mai mult am implementat coada dinamic iar nu ma lasa ka matricea(parcul) sa-l fak mai mult de [ 170 ] [ 170 ](daka pun [ 175 ] [ 175 ] in afara stivei imi da abnormal program termination iar daka pun in stiva imi da null pointer assigment pe comp Borland C)
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #19 : Ianuarie 22, 2009, 18:54:21 »

Tot ce merge in C merge si in C++, C++ fiind C + clase + stl. In rest sunt foarte mici diferente intre C si C++, la nivelul variabilelor adresa, la structuri, si la alocarea memoriei dinamic (in c++ se poate aloca in 2 feluri, cu malloc si new), dar deja suntem off-topic. Daca vrei diferentele exacte intre C si C++ deschide un topic in categoria informatica.
Memorat
gabor_oliviu1991
Nu mai tace
*****

Karma: 28
Deconectat Deconectat

Mesaje: 200



Vezi Profilul
« Răspunde #20 : Februarie 10, 2009, 22:35:32 »

am rezolvat problema cu dinamica. toate bune si frumoase exceptant testul 7 pe care iau TLE. http://infoarena.ro/job_detail/255720 .timpii la restul testelor sunt mici, deci presupun ca acolo imi cicleaza programul. unde ar putea fi gresala?
Memorat
Pepelea_Flaviu
Client obisnuit
**

Karma: 30
Deconectat Deconectat

Mesaje: 98



Vezi Profilul
« Răspunde #21 : Februarie 10, 2009, 22:37:09 »

Ai putea descrie putin ce faci pe-acolo si ce matrici/ vectori ai folosit.
Memorat
gabor_oliviu1991
Nu mai tace
*****

Karma: 28
Deconectat Deconectat

Mesaje: 200



Vezi Profilul
« Răspunde #22 : Februarie 10, 2009, 22:43:12 »

deci... matricea initiala ii initializata cu 0 daca am drum liber, si -1 daka e pom. in locul din care pornesc pun 1, si apoi atata timp cat in matricea mea mai am elemente de 0, pentru fiecare a(i,j)==0 imi determin minimul din N,E,S,V si actualizez a(i,j) cu min+1. daka e prea explicit va rog sa-mi ziceti
Memorat
c_e_manu
Nu mai tace
*****

Karma: 56
Deconectat Deconectat

Mesaje: 243



Vezi Profilul
« Răspunde #23 : Februarie 10, 2009, 23:25:14 »

tu faci minimul daca nu e -1... si ce faci daca in N, E, V, si S e pom si tu nu poti ajunge in punctul respectiv? Very Happy...

ceva de genul:

Cod:
0 0 -1 0 0
0 -1 0 -1 0
0 0 -1 0 0
0 0 0 0 0
0 0 0 0 0
Memorat
gabor_oliviu1991
Nu mai tace
*****

Karma: 28
Deconectat Deconectat

Mesaje: 200



Vezi Profilul
« Răspunde #24 : Februarie 10, 2009, 23:48:37 »

merge si pe exemplul acela. chiar nu stiu unde se poate impotmoli...
Memorat
Pagini: [1] 2 3 4   În sus
  Imprimă  
 
Schimbă forumul:  

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