Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: 1163 Tsunami  (Citit de 2012 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« : 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 Deconectat

Mesaje: 82



Vezi Profilul
« Răspunde #1 : Ianuarie 20, 2012, 23:10:14 »

Nu stiu de ce iau killed by signal 11  Brick wall la testul 3 si 10.Va puteti uita putin peste sursa??Chiar nu imi dau seama ce am gresit.
Cod:
#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 Deconectat

Mesaje: 1



Vezi Profilul
« Răspunde #2 : Februarie 14, 2012, 09:15:50 »

aceasi problema ca si vidrean... ne poate ajuta cineva ?
Memorat
VisuianMihai
De-al casei
***

Karma: -9
Deconectat Deconectat

Mesaje: 121



Vezi Profilul
« Răspunde #3 : Februarie 14, 2012, 09:20:57 »

coman cate matrici ai folosit
Memorat
darkseeker
De-al casei
***

Karma: 29
Deconectat Deconectat

Mesaje: 106



Vezi Profilul
« 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 Deconectat

Mesaje: 12



Vezi Profilul
« Răspunde #5 : Februarie 16, 2012, 19:45:02 »

Nu inteleg ce n-am facut bn la problema asta de iau 10 pct  (pe restu teste lor iau Killed by signal si incorect)sad
Nu am facut cu Lee dar am facut in felul urmator: am bordat matricea apoi am parcurs-o si cand un element era >0; <h; si se invecina cu apa il inundam (ii dadeam valoarea 0) si incrementam un contor; apoi valoarea contorului era raspunsul
 Annoyed Annoyed Annoyed Annoyed Annoyed Annoyed

Memorat
Mitza444
Client obisnuit
**

Karma: 6
Deconectat Deconectat

Mesaje: 82



Vezi Profilul
« 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 Wink.
« Ultima modificare: Februarie 17, 2012, 15:33:14 de către Vidrean Mihai » Memorat
iarba
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« 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?

Cod:
#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
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« 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 Smile.
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

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