题目:游游的数组染色

游游拿到了一个数组,其中一些数被染成红色,一些数被染成蓝色。
游游想知道,取两个不同颜色的数,且它们的数值相等,有多少种不同的取法?
我们定义,两种取法如果取的某个数在原数组的位置不同,则定义为不同的取法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<iostream>
#include<map>
using namespace std;
const int N = 2e5 + 10;

long long a[N];
char c[N];

map<int, int> m[2];//R对应0,B对应1

int main()
{
int n;
cin >> n;
for (int i = 0; i < n; i++) scanf("%lld", &a[i]);
cin >> c;

long long ans = 0;

for (int i = 0; i < n; i++)
{
ans += m[c[i] == 'B'][a[i]];
m[c[i] == 'R'][a[i]]++;
}

cout << ans << endl;

return 0;
}