题解 [CF1672C] Unequal Array

传送门

令最两边的满足 \(a_i=a_{i+1}\) 的位置为 \(left, right\)
那么发现最终这两个位置要通过移动合到一起
而这两个位置离得较远的时候可以通过让 left 和 right+1 相等省掉一次操作
可以这样的条件是 left 与 right 不相等

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define N 200010
#define ll long long
//#define int long long

char buf[1<<21], *p1=buf, *p2=buf;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf, 1, 1<<21, stdin)), p1==p2?EOF:*p1++)
inline int read() {
	int ans=0, f=1; char c=getchar();
	while (!isdigit(c)) {if (c=='-') f=-f; c=getchar();}
	while (isdigit(c)) {ans=(ans<<3)+(ans<<1)+(c^48); c=getchar();}
	return ans*f;
}

int n;
int a[N];

signed main()
{
	int T=read();
	while (T--) {
		n=read();
		for (int i=1; i<=n; ++i) a[i]=read();
		int left=INF, right=0;
		for (int i=1; i<n; ++i) if (a[i]==a[i+1]) left=min(left, i), right=max(right, i);
		if (!right || left==right) puts("0");
		else printf("%d\n", max(1, right-left-1));
	}
	
	return 0;
}
posted @ 2022-04-24 09:47  Administrator-09  阅读(3)  评论(0编辑  收藏  举报