1 条题解
-
0
#include<cstdio>
#include<iostream>
#define ll long long
using
namespace
std;
int
n, a[500005], nxt[500005][2];
int
lst[2];
char
c;
ll ans;
ll clac(
int
L,
int
R) {
if
(R - L + 1 < 3)
return
0;
return
1ll * (R - L + 1 - 3 + 1) * (R - L + 1 - 3 + 1 + 1) / 2;
}
int
main() {
scanf
(
"%d"
, &n);
for
(
int
i = 1; i <= n; i++) {
c =
getchar
();
while
(c !=
'G'
&& c !=
'H'
) c =
getchar
();
if
(c ==
'G'
) a[i] = 1;
}
lst[0] = lst[1] = n + 1; nxt[n + 1][0] = nxt[n + 1][1] = n + 1;
for
(
int
i = n; i >= 1; i--) {
nxt[i][0] = lst[0]; nxt[i][1] = lst[1];
lst[a[i]] = i;
}
ans = clac(1, n);
for
(
int
i = 1; i <= n; i++) {
int
L;
if
(a[i]) {
L = max(nxt[i][1], nxt[nxt[i][0]][0]);
}
else
{
L = max(nxt[i][0], nxt[nxt[i][1]][1]);
}
if
(L - i + 1 < 3) L = i + 2 - 1;
ans -= max(0, n - L + 1);
int
R = nxt[i][a[i] ^ 1] - 1;
if
(R - i + 1 >= 3) ans -= R - i + 1 - 3 + 1;
}
printf
(
"%lld"
, ans);
return
0;
}
- 1
信息
- ID
- 7133
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 4
- 已通过
- 2
- 上传者