悬关求调
查看原帖
悬关求调
685398
ssine233楼主2024/7/3 10:48
#include <bits/stdc++.h> 
using namespace std;
typedef long long ll;
const int N=2e6+10;
const int M=(1<<26)+10;
int n, np, z[N], cnt[M];
char a[N];
ll ans;

int main() {
	scanf("%d", &n);
	scanf("%s", a);
	for(int i=n; i>=1; i--)		a[i] = a[i-1];
	cnt[0]++;
	for(int i=1; i<=n; i++) {
		z[i] = z[i-1] + (1<<(a[i]-'a')) *
		 ((z[i-1]&(1<<(a[i]-'a')))>0 ? -1 : 1);		
		cnt[z[i]]++;
	} 
	for(int i=0; i<(1<<26); i++) 
		if(cnt[i]>=2)	ans += ((ll)(cnt[i]-1) * (ll)(cnt[i])) / 2;
	printf("%lld", ans);
	return 0;
}

25pts求调

2024/7/3 10:48
加载中...