C Good Subarrays
C Good Subarrays
当时写了个前缀和试试能不能暴力过,但是试了以后,发现T了。
看了数据范围,我就知道这应该是一个o(n)的算法,但是一直想不出来,是自己太菜了,看了大佬的代码才知道,这一题非常的妙。
AC代码
#include<iostream>
#include<map>
typedef long long LL;
using namespace std;
int main()
{
int t;
cin >> t;
while (t--)
{
int n;
string s;
cin >> n >> s;
map<LL, LL> mp;
LL sum = 0, ans = 0;
for (int i = 0; i < s.length(); i++)
{
sum += s[i] - '0' - 1;
if (sum == 0) ans++;
ans += mp[sum];
mp[sum]++;
}
cout << ans << endl;
}
return 0;
}