Wa on #1~4 Manache
查看原帖
Wa on #1~4 Manache
126972
Kevinx楼主2024/1/27 20:09
#include<bits/stdc++.h>
#define ull unsigned long long
#define ll long long
using namespace std;
const int N = 5e5 + 20;
ll n, tot = 0, d[N<<1], l = 1, r = 0, ans = 0, mid = 0;
char x[N], s[N], to[N];
int main (){
	cin >> n;
	cin >> x+1;
	s[0] = '$';
	to['1'] = '0', to['0'] = '1', to['#'] = '#', to['$'] = '$';
	for(int i = 1; i <= n; i++) {
		s[++tot] = '#';
		s[++tot] = x[i];
	}
	s[++tot] = '#';
	for(int i = 1; i <= tot; i+= 2) {
		if(i <= r) d[i] = min(d[2 * mid - i], r - i + 1);
		while(to[s[i + d[i]]] == s[i - d[i]]) d[i]++;
		if(i + d[i] > r) mid = i, r = i + d[i] - 1;
		if(i % 2 == 1) ans += (d[i] - 1) / 2;
	}
	printf("%lld", ans);
	return 0;
}

2024/1/27 20:09
加载中...