Advertisement
Guest User

Untitled

a guest
Apr 3rd, 2016
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.83 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <map>
  3. #define lli long long int
  4. #define MAX_L 100005
  5. using namespace std;
  6.  
  7. char s[MAX_L];
  8. int pref[MAX_L];
  9.  
  10. int main(void) {
  11.     int t;
  12.     int l;
  13.     map <int, int> mapa;
  14.  
  15.     scanf(" %d", &t);
  16.     while(t--) {
  17.         scanf(" %d", &l);
  18.         scanf(" %s", s);
  19.         mapa.clear();
  20.  
  21.         for (int i = 0; i < l; i++) {
  22.             if (s[i] == 'a') {
  23.                 pref[i] = -2;
  24.             } else if (s[i] == 'b') {
  25.                 pref[i] = 3;
  26.             } else {
  27.                 pref[i] = 0;
  28.             }
  29.             if (i != 0) {
  30.                 pref[i] += pref[i - 1];
  31.             }
  32.         }
  33.  
  34.         lli res = 0;
  35.         int seg = 0;
  36.         mapa[0] = 1;
  37.         for (int i = 0; i < l; i++) {
  38.             if (s[i] == 'c') {
  39.                 seg++;
  40.                 res -= seg;
  41.             } else {
  42.                 seg = 0;
  43.             }
  44.             //printf("i = %d, summing = %d\n", i, mapa[pref[i]] - seg);
  45.             res += mapa[pref[i]];  
  46.             mapa[pref[i]]++;
  47.         }
  48.         printf("%lld\n", res);
  49.     }
  50.     return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement