Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<fstream>
- #include<queue>
- #include<climits>
- using namespace std;
- ifstream fin("livada.in");
- ofstream fout("livada.out");
- int a[1005][1005];
- int di[4]= {0,-1,0,1};
- int dj[4]= {-1,0,1,0};
- queue<pair<int,int> >q;
- int L,E;
- int locuri=0;
- int cateMax=0;
- int cmmdc(int a, int b)
- {
- int r, d, i;
- d=a;
- i=b;
- while(i>0)
- {
- r=d%i;
- d=i;
- i=r;
- }
- return d;
- }
- int Fill(int i, int j, int veche)
- {
- int k, nexti, nextj;
- int nou=-1;
- int cate=1;
- q.push({i, j});
- a[i][j]=nou;
- while(!q.empty())
- {
- i=q.front().first;
- j=q.front().second;
- q.pop();
- for(k=0;k<4;k++)
- {
- nexti=i+di[k];
- nextj=j+dj[k];
- if(a[nexti][nextj]==veche)
- {
- cate++;
- q.push({nexti, nextj});
- a[nexti][nextj]=nou;
- }
- }
- }
- return cate;
- }
- void Lee()
- {
- int k, nexti, nextj;
- int i1, j1;
- int i, j;
- int cateInitial, auxInitial;
- int cate, aux;
- int p;
- while(!q.empty())
- {
- i1=q.front().first;
- j1=q.front().second;
- q.pop();
- if(a[i1][j1]==2)
- {
- cateInitial=1;
- auxInitial=E-3;
- }
- else
- {
- cateInitial=0;
- auxInitial=E;
- }
- for(k=0; k<4; k++)
- {
- i=i1;
- j=j1;
- //cout<<i<<" "<<j<<"\n"; cred ca aici e problema
- cate=cateInitial;
- aux=auxInitial;
- for(p=0; p<=INT_MAX; p++)
- {
- nexti=i+di[k];
- nextj=j+dj[k];
- if(a[nexti][nextj]==1)
- {
- break;
- }
- else
- {
- if(a[nexti][nextj]==0)
- {
- if(aux-1>=0)
- {
- aux--;
- i=nexti;
- j=nextj;
- }
- else
- {
- break;
- }
- }
- if(a[nexti][nextj]==2)
- {
- if(aux-4>=0)
- {
- cate++;
- aux-=4;
- i=nexti;
- j=nextj;
- }
- else
- {
- break;
- }
- }
- if(a[nexti][nextj]==-1)
- {
- if(aux-1>=0)
- {
- // aux--;
- //i=nexti;
- //j=nextj;
- locuri++;
- if(cate>cateMax)
- {
- cateMax=cate;
- }
- }
- break;
- }
- }
- }
- }
- }
- }
- int main()
- {
- int c,n,m;
- int i,j;
- fin>>c;
- fin>>n>>m;
- for(i=1; i<=n; i++)
- {
- for(j=1; j<=m; j++)
- {
- fin>>a[i][j];
- }
- }
- fin>>L>>E;
- if(c==1)
- {
- int nrP;
- nrP=(n/L)*(m/L);
- fout<<nrP<<" "<<(n*m)-(nrP*L*L);
- }
- if(c==2)
- {
- fout<<cmmdc(n, m);
- }
- if(c==3)
- {
- int numar;
- int max1=INT_MIN, max2=INT_MIN;
- for(i=1;i<=n;i++)
- {
- for(j=1;j<=m;j++)
- {
- if(a[i][j]==1)
- {
- numar=Fill(i, j, 1);
- if(numar>max1)
- {
- max1=numar;
- }
- }
- if(a[i][j]==2)
- {
- numar=Fill(i, j, 2);
- if(numar>max2)
- {
- max2=numar;
- }
- }
- }
- }
- fout<<max1<<" "<<max2;
- }
- if(c==4)
- {
- for(j=0; j<=m+1; j++)
- {
- a[0][j]=a[n+1][j]=-1;
- }
- for(i=0; i<=n+1; i++)
- {
- a[i][0]=a[i][m+1]=-1;
- }
- for(i=2; i<n; i++)
- {
- for(j=2; j<m; j++)
- {
- if(a[i][j]!=1)
- {
- q.push({i,j});
- }
- }
- }
- Lee();
- fout<<locuri<<" "<<cateMax;
- /*while(!q.empty())
- {
- fout<<q.front().first<<" ";
- fout<<q.front().second;
- fout<<"\n";
- q.pop();
- }*/
- /* for(i=0; i<=n+1; i++)
- {
- for(j=0; j<=m+1; j++)
- {
- fout<<a[i][j]<<" ";
- }
- fout<<"\n";
- }*/
- }
- fin.close();
- fout.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement