题意介绍
题意分析
尺取法,对于每一次找到的两个连续序列(前一部分相同,后一部分相同),计算2和1的个数,取个数较小的作为一个可选答案,每次移动取最大的可选答案即可。
通过代码
#include<bits/stdc++.h>
using namespace std;
int n, a[100000];
int main() {
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
int l = 0, r = 1, flag = 0,count=0,ans=2;
while ( r < n) {
while (a[r] == a[r - 1] && r < n) r++;
count++;
if (count == 1) {
flag = r;
r++;
}
if (count == 2) {
int leftnum = 0, rightnum = 0;
for (int i = l; i < r; i++) {
if (a[i] == 1) leftnum++;
if (a[i] == 2) rightnum++;
}
if (leftnum == rightnum) ans =max(ans, leftnum + rightnum);
else ans =max(ans, min(leftnum, rightnum) * 2);
l = flag;
count = 0;
}
}
cout << ans << endl;
return 0;
}