1+ package nc60245 ;
2+
3+ import java .util .HashMap ;
4+ import java .util .Map ;
5+ import java .util .Scanner ;
6+
7+ public class NC60245B {
8+ static int n ;
9+ static int [] a ;
10+ static String s ;
11+
12+ public static void main (String [] args ) {
13+ Scanner scanner = new Scanner (System .in );
14+ n = scanner .nextInt ();
15+ a = new int [n ];
16+ for (int i = 0 ; i < n ; i ++) {
17+ a [i ] = scanner .nextInt ();
18+ }
19+ s = scanner .next ();
20+ System .out .println (solve ());
21+ }
22+
23+ private static String solve () {
24+ Map <Integer , Integer > red = new HashMap <>();
25+ Map <Integer , Integer > blue = new HashMap <>();
26+ for (int i = 0 ; i < n ; i ++) {
27+ if (s .charAt (i ) == 'R' ) {
28+ red .put (a [i ], red .getOrDefault (a [i ], 0 ) + 1 );
29+ } else {
30+ blue .put (a [i ], blue .getOrDefault (a [i ], 0 ) + 1 );
31+ }
32+ }
33+
34+ long ans = 0 ;
35+ for (Map .Entry <Integer , Integer > entry : red .entrySet ()) {
36+ long rcnt = entry .getValue ();
37+ int bcnt = blue .getOrDefault (entry .getKey (), 0 );
38+ ans += rcnt * bcnt ;
39+ }
40+ return String .valueOf (ans );
41+ }
42+ }
43+ /*
44+ 游游的数组染色
45+ https://ac.nowcoder.com/acm/contest/60245/B
46+
47+ 题目描述
48+ 游游拿到了一个数组,其中一些数被染成红色,一些数被染成蓝色。
49+ 游游想知道,取两个不同颜色的数,且它们的数值相等,有多少种不同的取法?
50+ 我们定义,两种取法如果取的某个数在原数组的位置不同,则定义为不同的取法。
51+ 输入描述:
52+ 第一行输入一个正整数n,代表数组的长度。
53+ 第二行输入n 个正整数ai,代表数组中的元素。
54+ 第三行输入一个长度为n ,仅包含 'R' 和 'B' 两种字符的字符串,第i 个字符为 'R' 代表数组第i 个元素被染成红色,为 'B' 代表被染成蓝色。
55+ 1≤n≤200000
56+ 1≤ai≤10^9
57+ 输出描述:
58+ 输出一个整数,代表取数的方案数量。
59+
60+ 乘法原理
61+ ======
62+
63+ 示例1
64+ 输入
65+ 5
66+ 1 2 1 2 2
67+ BRRBB
68+ 输出
69+ 3
70+ 说明
71+ 第一种取法,取第一个数和第三个数,颜色不同且都是1。
72+ 第二种取法,取第二个数和第四个数,颜色不同且都是2。
73+ 第三种取法,取第二个数和第五个数,颜色不同且都是2。
74+
75+ 示例2
76+ 输入
77+ 3
78+ 2 3 3
79+ BBB
80+ 输出
81+ 0
82+ 说明
83+ 所有数都是蓝色,显然取不出两个颜色不同的数。
84+ */
0 commit comments