Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <iostream>
- #include <set>
- using namespace std;
- ifstream f("galerie.in");
- ofstream g("galerie.out");
- int n,m,t,k,x,i,pas,inou,jnou,a[205][205],di[]={-1,0,1,0},dj[]={0,1,0,-1},sapa_cineva;
- struct cartita{int i,j,l,di,dj;}C[1000];
- set<int> s;
- set<int> sterse;
- set<int>::iterator it;
- set<int>::iterator it1;
- int interior(int i, int j)
- { if(i*j==0)return 0;
- if(i>n)return 0;
- if(j>m)return 0;
- return 1;
- }
- void uneste_galerii(int i,int j,int c1,int c2)
- { int k,i1,j1;
- if(interior(i,j))
- for(k=0;k<4;k++) {i1=i+di[k];j1=j+dj[k];
- if(a[i1][j1]==c1) { a[i1][j1]=c2;
- uneste_galerii(i1,j1,c1,c2);
- }
- }
- }
- int main()
- { f>>k>>n>>m>>t;
- for(i=1;i<=t;i++)
- {f>>x;
- if(x<=m) {C[i].i=0;C[i].j=x;C[i].di=1;C[i].dj=0;}
- else
- if(x<=n+m) {C[i].i=x-m;C[i].j=m+1; C[i].di=0;C[i].dj=-1;}
- else
- if(x<=2*m+n){C[i].i=n+1;C[i].j=2*m+n+1-x;C[i].di=-1;C[i].dj=0;}
- else {C[i].i=2*n+2*m+1-x;C[i].j=0;C[i].di=0;C[i].dj=1;}
- s.insert(i);
- }
- for(i=1;i<=n;i++)a[i][0]=a[i][m+1]=-1;
- for(i=1;i<=m;i++)a[0][i]=a[n+1][i]=-1;
- while(!s.empty())
- { sapa_cineva=0;
- sterse.clear();
- for(it=s.begin();it != s.end(); it++)
- { i=*it;
- inou=C[i].i+C[i].di;
- jnou=C[i].j+C[i].dj;
- x=a[inou][jnou];
- if(x==0) {a[inou][jnou]=i;C[i].l++;C[i].i=inou;C[i].j=jnou;sapa_cineva=1;}
- else
- { if(x!=-1)
- {
- uneste_galerii(inou,jnou,i,x);
- C[x].l+=C[i].l;
- if (x<i && a[inou+C[x].di][jnou+C[x].dj]!=x) sterse.insert(x);
- }
- sterse.insert(i);
- }
- }
- for(it=sterse.begin();it != sterse.end(); it++)
- { i=*it;
- if(s.count(i)!=0) s.erase(i);
- }
- if(sapa_cineva) pas++;
- }
- if(k==1) g<<pas<<'\n';
- else
- { x=C[1].l;
- for(i=2;i<=t;i++) if(C[i].l>x)x=C[i].l;
- g<<x<<'\n';
- }
- f.close();g.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement