CF1931C题解
思路
题目中说了“至多一次操作”,所以只有左边连续一段和右边连续一段不可能被改。这时候分情况讨论:
- ,答案是 ;
- ,答案是 减去头尾的连续段;
- ,答案是 。
代码
# include <bits/stdc++.h>
using namespace std;
int t, n, a[200005], sum1, sum2, i;
int main () {
ios::sync_with_stdio (0);
cin.tie (0);
cout.tie (0);
cin >> t;
while (t --) {
cin >> n;
i = 1, sum1 = sum2 = 0;
for (int i = 1; i <= n; ++ i)
cin >> a[i];
while (i <= n && a[i] == a[1])
++ i, ++ sum1;
if (i > n) {
cout << "0\n";
continue ;
}
i = n;
while (a[i] == a[n])
-- i, ++ sum2;
cout << n - (a[1] == a[n] ? sum1 + sum2 : max (sum1, sum2)) << '\n';
}
return 0;
}

浙公网安备 33010602011771号