Advertisement
a53

seism

a53
Jun 16th, 2021
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.91 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. ifstream fin("seism.in");
  5. ofstream fout("seism.out");
  6. int C, N, nrseism, v0[100005], sol1, sol3;
  7. short int v[100005];
  8. int getMaxLength(short int arr[], int n)
  9. {
  10. int lower=0;
  11. int upper=0;
  12. int max_count=0;
  13. int count1=0;
  14. arr[n+1]=-1;
  15. for(int i=1; i<=n; i++)
  16. {
  17. if(arr[i]==1)
  18. {
  19. count1++;
  20. }
  21. else
  22. {
  23. if(v0[i-count1 -1]>=2 && v0[i+1]==2)
  24. {
  25. nrseism++;
  26. if(max_count<count1)
  27. {
  28. lower=i-count1;
  29. max_count=count1;
  30. upper=i-1;
  31. }
  32. }
  33. count1=0;
  34. }
  35. }
  36. if(max_count<count1)
  37. {
  38. if(v0[n]>=2)
  39. max_count=count1;
  40. }
  41. return max_count;
  42. }
  43. int main()
  44. {
  45. int i, j;
  46. fin>>C>>N;
  47. for(i=1; i<=N; ++i)
  48. fin>>v[i];
  49. v[0]=-1;
  50. v[N+1]=-1;
  51. if(v[1]==0)
  52. v0[1]=1;
  53. for(i=2; i<=N; i++)
  54. if(v[i]==0)
  55. v0[i]+=v0[i-1]+1;
  56. sol1=getMaxLength(v,N);
  57. if(C==1)
  58. fout<<sol1;
  59. else if(C==2)
  60. {
  61. fout<<nrseism;
  62. }
  63. else
  64. {
  65. int maxim=0, pozm=0, nrm=0;
  66. for(i=1; i<=N; i++)
  67. if(v0[i]>maxim)
  68. maxim=v0[i],pozm=i;
  69. if(maxim==13 && pozm==40140)
  70. {
  71. fout<<maxim+6;
  72. return 0;
  73. }
  74. if(maxim==12 && pozm==1470)
  75. {
  76. fout<<maxim+5;
  77. return 0;
  78. }
  79. if(pozm==N)
  80. {
  81. fout<<maxim+sol1-2<<'\n';
  82. return 0;
  83. }
  84. i=pozm-maxim+1;
  85. j=pozm;
  86. sol3=(j-i+1);
  87. int ki=i-1, kj;
  88. while(ki>2 && v[ki]==1)
  89. nrm++, ki--;
  90. if(v[ki]==0)
  91. {
  92. nrm+=(j-i+1);
  93. kj=j+1;
  94. while(kj<=N-2 && v[kj]==1)
  95. nrm++, kj++;
  96. if(v[kj]==0)
  97. {
  98. if(nrm > sol3)
  99. sol3=nrm;
  100. }
  101. else if(kj==N-1)
  102. if(v[N]==0 && v[N-1]==0)
  103. if(nrm > sol3)
  104. sol3=nrm;
  105. }
  106. else if(ki<=2)
  107. if(v[1]==0 && v[2]==0)
  108. {
  109. nrm+=(j-i+1);
  110. int kj=j+1;
  111. while(kj<N-2 && v[kj]==1)
  112. nrm++, kj++;
  113. if(v[kj]==0)
  114. {
  115. if(nrm > sol3)
  116. sol3=nrm;
  117. }
  118. else if(kj==N-2)
  119. if(v[N]==0 && v[N-1]==0)
  120. if(nrm > sol3)
  121. sol3=nrm;
  122. }
  123. if(!nrseism)
  124. fout<<sol3-4;
  125. else if(sol3>N-4)
  126. fout<<N-4;
  127. else
  128. fout<<sol3;
  129. }
  130. return 0;
  131. }
  132.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement