最后一个点一直T
查看原帖
最后一个点一直T
917615
miller_xu楼主2023/5/7 11:08
#include <bits/stdc++.h>
using namespace std;
struct node {
	int lG, lH;
	int rG, rH;
} cow[500010];
char s[500010];
long long ans;
void ready_() {        // 预处理
	int num_G = 0, num_H = 0, i, len = strlen(s);
	for (i = 0; i < len; i++) {
		cow[i].lH = num_H;
		cow[i].lG = num_G;
		if (s[i] == 'G') num_G++, num_H = 0;
		else num_H++, num_G = 0;
	}
	num_G = num_H = 0;
	for (i = len - 1; i >= 0; i--) {
		cow[i].rH = num_H;
		cow[i].rG = num_G;
		if (s[i] == 'G') num_G++, num_H = 0;
		else num_H++, num_G = 0;
	}
}
int main() {
#ifndef ONLINE_JUDGE
	freopen("P7993_11.in", "r", stdin);
#endif
	int n, i;
	scanf("%d%s", &n, s);
	ready_();
	for (i = 0; i < int(strlen(s)); i++) {
		if (s[i] == 'G') {
			ans += cow[i].lH * cow[i].rH + cow[i].lH + cow[i].rH - 2;
			ans = ans + (!cow[i].lH) + (!cow[i].rH);
		} else {
			ans += cow[i].lG * cow[i].rG + cow[i].lG + cow[i].rG - 2;
			ans = ans + (!cow[i].lG) + (!cow[i].rG);
		}
	}
	printf("%lld", ans);
}

蒟蒻觉得时间复杂度没问题啊,求助

2023/5/7 11:08
加载中...