fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define read(type) readInt<type>() // Fast read
  4. #define ll long long
  5. #define nL "\n"
  6. #define pb push_back
  7. #define mk make_pair
  8. #define pii pair<int, int>
  9. #define a first
  10. #define b second
  11. #define vi vector<int>
  12. #define all(x) (x).begin(), (x).end()
  13. #define umap unordered_map
  14. #define uset unordered_set
  15. #define MOD 1000000007
  16. #define imax INT_MAX
  17. #define imin INT_MIN
  18. #define exp 1e9
  19. #define sz(x) (int((x).size()))
  20.  
  21.  
  22. void solve() {
  23. int n; cin >> n;
  24.  
  25. int ht = 0; int gt = 0;
  26. vector<char> HG(n); for(auto i = 0; i < n; i++) {
  27. char d; cin >> d;
  28. if (d == 'H') {ht++;}
  29. else {gt++;}
  30.  
  31. HG[i] = d;
  32. }
  33.  
  34. set<int> H; set<int> G;
  35.  
  36. for(auto i = 0; i < n; i++) {
  37. int x; cin >> x;
  38.  
  39. int hc = 0; int gc = 0;
  40.  
  41. if (HG[i] == 'H') {
  42. vector<int> gPos;
  43. for(auto j = i; j < x; j++) {
  44. if (HG[j] == 'H') {hc++;}
  45. else {gPos.pb(j); gc++;}
  46. }
  47.  
  48. if (hc==ht) {H.insert(i);}
  49. for(auto v : gPos) {G.insert(v);}
  50.  
  51. if (hc!=ht && (int)gPos.size() == 0) {H.erase(i);}
  52. } else {
  53. vector<int> hPos;
  54. for(auto j = i; j < x; j++) {
  55. if (HG[j] == 'G') {gc++;}
  56. else {hPos.pb(j); hc++;}
  57. }
  58.  
  59. if (gc==gt) {G.insert(i);}
  60. for(auto v : hPos) {H.insert(v);}
  61.  
  62. if(gc!=gt && (int)hPos.size() == 0) {G.erase(i);}
  63. }
  64. }
  65.  
  66. cout << (int)H.size()*(int)G.size() << endl;
  67. }
  68.  
  69.  
  70.  
  71. int32_t main()
  72. {
  73. ios_base::sync_with_stdio(false);
  74. cin.tie(NULL);
  75. solve();
  76. return 0;
  77. }
Success #stdin #stdout 0.01s 5504KB
stdin
3
GGH
2 3 3
stdout
1