1 条题解
-
0njnu19210225 (季润民) LV 10 MOD @ 2023-07-03 13:53:01
题解
对于一个确定的数字 \(x\), 如果被染成红色的有 \(a_x\) 个,被染成蓝色的有 \(b_x\) 个,那么取出两个不同颜色的数,数值都为 \(x\) 的取法有 \(a_x*b_x\) 种。
那么对于每一个数组中出现的数字,都算出其对应的 \(a\) 和 \(b\) 的值,最后求乘积的和即可。
在具体实现时,由于数组元素范围较大,可以使用哈希表unordered_map或者 \(map\) 来进行计算。
示例代码
typedef long long LL; void Solve() { int n; cin >> n; unordered_map<int, int> rh, bh; vector<int> a(n+5); for(int i=0; i<n; i++) cin >> a[i]; string str; cin >> str; for(int i=0; i<str.size(); i++) { char c = str[i]; if(c == 'B') bh[a[i]]++; else rh[a[i]]++; } LL res = 0; for(auto it:rh) { int x = it.first; int y = it.second; res += (LL)y * bh[x]; } cout << res << endl; }
- 1
信息
- ID
- 1420
- 难度
- 5
- 分类
- (无)
- 标签
- (无)
- 递交数
- 74
- 已通过
- 25
- 通过率
- 34%
- 上传者