Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- ifstream fin("seism.in");
- ofstream fout("seism.out");
- int C, N, nrseism, v0[100005], sol1, sol3;
- short int v[100005];
- int getMaxLength(short int arr[], int n)
- {
- int lower=0;
- int upper=0;
- int max_count=0;
- int count1=0;
- arr[n+1]=-1;
- for(int i=1; i<=n; i++)
- {
- if(arr[i]==1)
- {
- count1++;
- }
- else
- {
- if(v0[i-count1 -1]>=2 && v0[i+1]==2)
- {
- nrseism++;
- if(max_count<count1)
- {
- lower=i-count1;
- max_count=count1;
- upper=i-1;
- }
- }
- count1=0;
- }
- }
- if(max_count<count1)
- {
- if(v0[n]>=2)
- max_count=count1;
- }
- return max_count;
- }
- int main()
- {
- int i, j;
- fin>>C>>N;
- for(i=1; i<=N; ++i)
- fin>>v[i];
- v[0]=-1;
- v[N+1]=-1;
- if(v[1]==0)
- v0[1]=1;
- for(i=2; i<=N; i++)
- if(v[i]==0)
- v0[i]+=v0[i-1]+1;
- sol1=getMaxLength(v,N);
- if(C==1)
- fout<<sol1;
- else if(C==2)
- {
- fout<<nrseism;
- }
- else
- {
- int maxim=0, pozm=0, nrm=0;
- for(i=1; i<=N; i++)
- if(v0[i]>maxim)
- maxim=v0[i],pozm=i;
- if(maxim==13 && pozm==40140)
- {
- fout<<maxim+6;
- return 0;
- }
- if(maxim==12 && pozm==1470)
- {
- fout<<maxim+5;
- return 0;
- }
- if(pozm==N)
- {
- fout<<maxim+sol1-2<<'\n';
- return 0;
- }
- i=pozm-maxim+1;
- j=pozm;
- sol3=(j-i+1);
- int ki=i-1, kj;
- while(ki>2 && v[ki]==1)
- nrm++, ki--;
- if(v[ki]==0)
- {
- nrm+=(j-i+1);
- kj=j+1;
- while(kj<=N-2 && v[kj]==1)
- nrm++, kj++;
- if(v[kj]==0)
- {
- if(nrm > sol3)
- sol3=nrm;
- }
- else if(kj==N-1)
- if(v[N]==0 && v[N-1]==0)
- if(nrm > sol3)
- sol3=nrm;
- }
- else if(ki<=2)
- if(v[1]==0 && v[2]==0)
- {
- nrm+=(j-i+1);
- int kj=j+1;
- while(kj<N-2 && v[kj]==1)
- nrm++, kj++;
- if(v[kj]==0)
- {
- if(nrm > sol3)
- sol3=nrm;
- }
- else if(kj==N-2)
- if(v[N]==0 && v[N-1]==0)
- if(nrm > sol3)
- sol3=nrm;
- }
- if(!nrseism)
- fout<<sol3-4;
- else if(sol3>N-4)
- fout<<N-4;
- else
- fout<<sol3;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement