进食后人sub#1 All wa
查看原帖
进食后人sub#1 All wa
1265992
zhangyuqi277h楼主2025/8/1 14:21

学习第三篇题解,不要在最后用等差数列求和公式写,写在第一个统计二进制循环里面

wa task:

#include <bits/stdc++.h>
using namespace std;
const int N=2e5+100,M=7e7;
int sub[N],n,ton[M];
string s;
long long ans=0;
int main(){
	cin >> n;
	cin >> s;
	ton[0]++;
	for(int i=0;i<n;i++){
		if(i>0) sub[i]=sub[i-1];
		if(sub[i]>>(s[i]-'a')&1) sub[i]-=1<<(s[i]-'a');
		else sub[i]+=1<<(s[i]-'a');
		ton[sub[i]]++;
	}
	for(int i=0;i<M;i++){
		ans+=(ton[i]*(ton[i]-1))/2;
	}
	cout << ans;
	return 0;
}

ac task

#include <bits/stdc++.h>
using namespace std;
const int N=2e5+100,M=7e7;
int sub[N],n,ton[M];
string s;
long long ans=0;
int main(){
	cin >> n;
	cin >> s;
	ton[0]++;
	for(int i=0;i<n;i++){
		if(i>0) sub[i]=sub[i-1];
		if(sub[i]>>(s[i]-'a')&1) sub[i]-=1<<(s[i]-'a');
		else sub[i]+=1<<(s[i]-'a');
		ans+=ton[sub[i]];
		ton[sub[i]]++;
	}
	cout << ans;
	return 0;
}

有用记得感谢我awa

2025/8/1 14:21
加载中...