•devilkind
|
|
« : Mai 06, 2011, 14:45:59 » |
|
Aici puteti discuta despre problema Tsunami. [Multumiri lui Simoiu Robert pentru ca a adaugat aceasta problema in arhiva]
|
|
|
Memorat
|
|
|
|
•Mitza444
Client obisnuit
Karma: 6
Deconectat
Mesaje: 82
|
|
« Răspunde #1 : Ianuarie 20, 2012, 23:10:14 » |
|
Nu stiu de ce iau killed by signal 11 la testul 3 si 10.Va puteti uita putin peste sursa??Chiar nu imi dau seama ce am gresit. #include<cstdio> using namespace std; #define MAX 1002 int n,m,h,nr=0; int mat[MAX][MAX]; bool q[MAX][MAX]; int dx[] = {0,0,-1,1}; int dy[] = {-1,1,0,0}; void fill(int x,int y){ int xnou,ynou,d; q[x][y]=1; if(mat[x][y]){ mat[x][y]=0; nr++; } for(d=0;d<4;d++){ xnou=x+dx[d]; ynou=y+dy[d]; if((mat[xnou][ynou]<h)&& !q[xnou][ynou] && xnou>=1 && xnou<=n && ynou>=1 && ynou<=m) fill(xnou,ynou); } } int main(){ freopen("tsunami.in","r",stdin); freopen("tsunami.out","w",stdout); int i,j; scanf("%d%d%d",&n,&m,&h); for(i=1;i<=n;i++){ for(j=1;j<=m;j++) scanf("%d",&mat[i][j]); } fclose(stdin); for(i=1;i<=n;i++){ for(j=1;j<=m;j++){ if(mat[i][j]==0 && !q[i][j]) fill(i,j); } } printf("%d\n",nr); fclose(stdout); return 0; }
|
|
|
Memorat
|
|
|
|
•Coman95
Strain
Karma: 0
Deconectat
Mesaje: 1
|
|
« Răspunde #2 : Februarie 14, 2012, 09:15:50 » |
|
aceasi problema ca si vidrean... ne poate ajuta cineva ?
|
|
|
Memorat
|
|
|
|
•VisuianMihai
|
|
« Răspunde #3 : Februarie 14, 2012, 09:20:57 » |
|
coman cate matrici ai folosit
|
|
|
Memorat
|
|
|
|
•darkseeker
|
|
« Răspunde #4 : Februarie 16, 2012, 14:52:08 » |
|
Pai la tine pentru fie apel al functiei fill se pun 5 inturi pe stiva , xnou ,ynou ,d, si cei 2 parametri . La acestia se adauga variabilele globale , adica matricea efectiva care ocupa cam 4mb , avand 1 milion de variabile int . Cum pe unele teste se poate parcurge toata matricea se poate ajunge la un nr f mare de apeluri ale functiei fill , depasind memoria de 16 mb . La 700000 de apeluri ale functiei fill memoria alocata depaseste 16 mb . Te-as sfatui sa incerci cu lee . Merge foarte bine din pct. de vedere al timpului si al memoriei . Daca totusi vrei neaparat fill poti incerca optimizarea fill-ului folosind variabile de tip short .
|
|
|
Memorat
|
|
|
|
•DaNutZ2UuU
Strain
Karma: -7
Deconectat
Mesaje: 12
|
|
« Răspunde #5 : Februarie 16, 2012, 19:45:02 » |
|
|
|
|
Memorat
|
|
|
|
•Mitza444
Client obisnuit
Karma: 6
Deconectat
Mesaje: 82
|
|
« Răspunde #6 : Februarie 17, 2012, 14:59:55 » |
|
Eu am facut simplu cu o coada din stl in care am introdus la citire toate zonele cu 0 si dupaia am facut un fel de Lee care adauga in coada fiecare zona inundabila si o variabila care creste cand se introduce un element in coada.Cred ca merge si cu o coada simpla ( sir),ideea este ca trebuie facut iterativ pt. ca dupa cum a explicat Boaca Cosmin daca faci revursiv depaseste 16 mb stiva .
|
|
« Ultima modificare: Februarie 17, 2012, 15:33:14 de către Vidrean Mihai »
|
Memorat
|
|
|
|
•iarba
Strain
Karma: 0
Deconectat
Mesaje: 1
|
|
« Răspunde #7 : Martie 06, 2012, 07:20:17 » |
|
si eu si un coleg avem aceeasi problema:killed by signal 11 de asemenea am luat testele de la oni si,uimitor,imi da aceeasi eroare si in mingw ies undeva din stiva sau ceva? #include <stdio.h> FILE *f,*g; char a[1005][1005]; long s; int n,m,h,i,j,k; long cauta(int ii,int jj) { long aux; aux=1; a[ii][jj]=0; if((a[ii][jj-1]<h)&&(a[ii][jj-1])){aux=aux+cauta(ii,jj-1);} if((a[ii][jj+1]<h)&&(a[ii][jj+1])){aux=aux+cauta(ii,jj+1);} if((a[ii+1][jj]<h)&&(a[ii+1][jj])){aux=aux+cauta(ii+1,jj);} if((a[ii-1][jj]<h)&&(a[ii-1][jj])){aux=aux+cauta(ii-1,jj);} return aux; } int main() { f=fopen("tsunami.in","r"); g=fopen("tsunami.out","w"); fscanf(f,"%d%d%d",&n,&m,&h); for(i=1;i<=n;i++){ a[i][0]=11; a[i][m+1]=11; } for(j=1;j<=m;j++){ a[0][j]=11; a[n+1][j]=11; } for(i=1;i<=n;i++){ for(j=1;j<=m;j++){ fscanf(f,"%d",&k); if(k>=11){a[i][j]=11;} else{a[i][j]=k;} } } s=0; for(i=1;i<=n;i++){ for(j=1;j<=m;j++){ if((a[i][j]<h)&&(a[i][j])){ if((a[i][j-1]==0)||(a[i][j+1]==0)||(a[i+1][j]==0)||(a[i-1][j]==0)){ s=s+cauta(i,j); } } } } fprintf(g,"%d",s); fclose(f); fclose(g); return 0; }
Editat de moderator: Foloseste tagul code pentru a afisa codul sursa.
|
|
« Ultima modificare: Martie 06, 2012, 21:45:53 de către Stefan-Alexandru Filip »
|
Memorat
|
|
|
|
•SpiderMan
|
|
« Răspunde #8 : Martie 11, 2012, 10:13:33 » |
|
Luati KBS pentru ca iasa din memoria stivei, deoarece fill-ul il faceti recursiv, si nu aveti destula memorie. Bagati fill iterativ, si o sa se rezolve .
|
|
|
Memorat
|
|
|
|
|