社区讨论
C求调!
学术版参与者 6已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @mjocwh1s
- 此快照首次捕获于
- 2025/12/27 21:48 2 个月前
- 此快照最后确认于
- 2025/12/30 20:50 2 个月前
rt,心态崩了,没看 。
CPP#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 200005;
int n, sz, ans, a[N];
bool b[N];
vector<int> c;
bool check(int x, int y, int z, int r) {
if (a[x] == a[y] && a[x] == a[z] && a[x] == a[r])
return 1;
return 0;
}
int main() {
scanf("%d", &n);
ans = n;
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
for (int i = 1; i <= n - 3; i++)
if (!b[i] && check(i, i + 1, i + 2, i + 3))
c.push_back(i), b[i] = b[i + 1] = b[i + 2] = b[i + 3] = 1;
sz = c.size();
for (int i = 0; i < sz; i++) {
int l = c[i] - 1, r = c[i] + 4, x, y, cnt = 4;
if (!i)
x = 0;
else
x = c[i - 1] + 3;
for (; l > x && r <= n; --l, ++r) {
bool f = 1;
if (r + 2 <= n && check(l, r, r + 1, r + 2) && f)
--l, r += 3, f = 0;
if (l - 1 > x && r + 1 <= n && check(l - 1, l, r, r + 1) && f)
l -= 2, r += 2, f = 0;
if (l - 2 > x && check(l - 2, l - 1, l, r) && f)
l -= 3, ++r, f = 0;
if (l - 3 > x && check(l - 3, l - 2, l - 1, l) && f)
l -= 4, f = 0;
if (r + 3 <= n && check(r + 0, r + 1, r + 2, r + 3) && f)
r += 4, f = 0;
if (f)
break;
cnt += 4;
}
ans -= cnt;
c[i] = r;
}
printf("%d\n", max(0, ans));
}
回复
共 7 条回复,欢迎继续交流。
正在加载回复...