1 条题解

  • 0
    @ 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%
上传者