Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define ll long long
- #define _test int _TEST; cin>>_TEST; while(_TEST--)
- #define ff first
- #define ss second
- #define pb push_back
- int main()
- {
- int n;
- cin>>n;
- vector<int> a(n);
- for(auto &e: a) cin>>e;
- string s;
- cin>>s;
- ll int ans = 0;
- // mex = 1
- {
- ll int cntM0=0;
- ll int cntX0=0;
- ll int cntM1=0;
- ll int cntX1=0;
- ll int cntM2=0;
- ll int cntX2=0;
- for(int i=0; i<n; i++)
- {
- cntX0 += (s[i]=='X' && a[i]==0);
- cntX1 += (s[i]=='X' && a[i]==1);
- cntX2 += (s[i]=='X' && a[i]==2);
- }
- for(int i=0; i<n; i++)
- {
- cntM0 += (s[i]=='M' && a[i]==0);
- cntM1 += (s[i]=='M' && a[i]==1);
- cntM2 += (s[i]=='M' && a[i]==2);
- cntX0 -= (s[i]=='X' && a[i]==0);
- cntX1 -= (s[i]=='X' && a[i]==1);
- cntX2 -= (s[i]=='X' && a[i]==2);
- if(s[i]=='E' && a[i]==0)
- ans += (cntM0*cntX2 + cntM2*cntX0 + cntM0*cntX0 + cntM2*cntX2);
- if(s[i]=='E' && a[i]==2)
- ans += (cntM0*cntX0 + cntM2*cntX0 + cntM0*cntX2);
- }
- }
- // mex = 2
- {
- ll int cntM0=0;
- ll int cntX0=0;
- ll int cntM1=0;
- ll int cntX1=0;
- for(int i=0; i<n; i++)
- {
- cntX0 += (s[i]=='X' && a[i]==0);
- cntX1 += (s[i]=='X' && a[i]==1);
- }
- for(int i=0; i<n; i++)
- {
- cntM0 += (s[i]=='M' && a[i]==0);
- cntM1 += (s[i]=='M' && a[i]==1);
- cntX0 -= (s[i]=='X' && a[i]==0);
- cntX1 -= (s[i]=='X' && a[i]==1);
- if(s[i]=='E' && a[i]==0)
- ans += 2ll*(cntM1*cntX1 + cntM0*cntX1 + cntM1*cntX0);
- if(s[i]=='E' && a[i]==1)
- ans += 2ll*(cntM0*cntX0 + cntM0*cntX1 + cntM1*cntX0);
- }
- }
- // mex = 3
- {
- ll int cntM0=0;
- ll int cntX0=0;
- ll int cntM1=0;
- ll int cntX1=0;
- ll int cntM2=0;
- ll int cntX2=0;
- for(int i=0; i<n; i++)
- {
- cntX0 += (s[i]=='X' && a[i]==0);
- cntX1 += (s[i]=='X' && a[i]==1);
- cntX2 += (s[i]=='X' && a[i]==2);
- }
- for(int i=0; i<n; i++)
- {
- cntM0 += (s[i]=='M' && a[i]==0);
- cntM1 += (s[i]=='M' && a[i]==1);
- cntM2 += (s[i]=='M' && a[i]==2);
- cntX0 -= (s[i]=='X' && a[i]==0);
- cntX1 -= (s[i]=='X' && a[i]==1);
- cntX2 -= (s[i]=='X' && a[i]==2);
- if(s[i]=='E' && a[i]==0)
- ans += 3ll*(cntM1*cntX2 + cntM2*cntX1);
- if(s[i]=='E' && a[i]==1)
- ans += 3ll*(cntM0*cntX2 + cntM2*cntX0);
- if(s[i]=='E' && a[i]==2)
- ans += 3ll*(cntM0*cntX1 + cntM1*cntX0);
- }
- }
- cout<<ans<<"\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment