Ankit_132

E

Jul 1st, 2023
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.98 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define ll     long long
  5. #define _test   int _TEST; cin>>_TEST; while(_TEST--)
  6. #define ff     first
  7. #define ss     second
  8. #define pb     push_back
  9.  
  10. int main()
  11. {
  12.     int n;
  13.     cin>>n;
  14.  
  15.     vector<int> a(n);
  16.     for(auto &e: a)     cin>>e;
  17.  
  18.     string s;
  19.     cin>>s;
  20.  
  21.     ll int ans = 0;
  22.  
  23.     // mex = 1
  24.     {
  25.         ll int cntM0=0;
  26.         ll int cntX0=0;
  27.         ll int cntM1=0;
  28.         ll int cntX1=0;
  29.         ll int cntM2=0;
  30.         ll int cntX2=0;
  31.  
  32.         for(int i=0; i<n; i++)
  33.         {
  34.             cntX0 += (s[i]=='X' && a[i]==0);
  35.             cntX1 += (s[i]=='X' && a[i]==1);
  36.             cntX2 += (s[i]=='X' && a[i]==2);
  37.         }
  38.  
  39.         for(int i=0; i<n; i++)
  40.         {
  41.             cntM0 += (s[i]=='M' && a[i]==0);
  42.             cntM1 += (s[i]=='M' && a[i]==1);
  43.             cntM2 += (s[i]=='M' && a[i]==2);
  44.             cntX0 -= (s[i]=='X' && a[i]==0);
  45.             cntX1 -= (s[i]=='X' && a[i]==1);
  46.             cntX2 -= (s[i]=='X' && a[i]==2);
  47.  
  48.             if(s[i]=='E' && a[i]==0)
  49.                 ans += (cntM0*cntX2 + cntM2*cntX0 + cntM0*cntX0 + cntM2*cntX2);
  50.             if(s[i]=='E' && a[i]==2)
  51.                 ans += (cntM0*cntX0 + cntM2*cntX0 + cntM0*cntX2);
  52.         }
  53.     }
  54.  
  55.     // mex = 2
  56.     {
  57.         ll int cntM0=0;
  58.         ll int cntX0=0;
  59.         ll int cntM1=0;
  60.         ll int cntX1=0;
  61.  
  62.         for(int i=0; i<n; i++)
  63.         {
  64.             cntX0 += (s[i]=='X' && a[i]==0);
  65.             cntX1 += (s[i]=='X' && a[i]==1);
  66.         }
  67.  
  68.         for(int i=0; i<n; i++)
  69.         {
  70.             cntM0 += (s[i]=='M' && a[i]==0);
  71.             cntM1 += (s[i]=='M' && a[i]==1);
  72.             cntX0 -= (s[i]=='X' && a[i]==0);
  73.             cntX1 -= (s[i]=='X' && a[i]==1);
  74.  
  75.             if(s[i]=='E' && a[i]==0)
  76.                 ans += 2ll*(cntM1*cntX1 + cntM0*cntX1 + cntM1*cntX0);
  77.             if(s[i]=='E' && a[i]==1)
  78.                 ans += 2ll*(cntM0*cntX0 + cntM0*cntX1 + cntM1*cntX0);
  79.         }
  80.     }
  81.  
  82.     // mex = 3
  83.     {
  84.         ll int cntM0=0;
  85.         ll int cntX0=0;
  86.         ll int cntM1=0;
  87.         ll int cntX1=0;
  88.         ll int cntM2=0;
  89.         ll int cntX2=0;
  90.  
  91.         for(int i=0; i<n; i++)
  92.         {
  93.             cntX0 += (s[i]=='X' && a[i]==0);
  94.             cntX1 += (s[i]=='X' && a[i]==1);
  95.             cntX2 += (s[i]=='X' && a[i]==2);
  96.         }
  97.  
  98.         for(int i=0; i<n; i++)
  99.         {
  100.             cntM0 += (s[i]=='M' && a[i]==0);
  101.             cntM1 += (s[i]=='M' && a[i]==1);
  102.             cntM2 += (s[i]=='M' && a[i]==2);
  103.             cntX0 -= (s[i]=='X' && a[i]==0);
  104.             cntX1 -= (s[i]=='X' && a[i]==1);
  105.             cntX2 -= (s[i]=='X' && a[i]==2);
  106.  
  107.             if(s[i]=='E' && a[i]==0)
  108.                 ans += 3ll*(cntM1*cntX2 + cntM2*cntX1);
  109.             if(s[i]=='E' && a[i]==1)
  110.                 ans += 3ll*(cntM0*cntX2 + cntM2*cntX0);
  111.             if(s[i]=='E' && a[i]==2)
  112.                 ans += 3ll*(cntM0*cntX1 + cntM1*cntX0);
  113.         }
  114.     }
  115.  
  116.     cout<<ans<<"\n";
  117. }
  118.  
Advertisement
Add Comment
Please, Sign In to add comment