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; }