題目連結: https://zerojudge.tw/ShowProblem?problemid=e288

# 解題思路

可將第 n 位元作為有無對應角色的狀態。「1」代表有該角色,「0」代表沒有。
| 可以做加法的運算, ^ 可以用來判斷是否兩個 CP 間是否只有一組有該角色
(話說,這題 unorderd_set 比較快喔!)
(這是位元運算的基本題喔~)

# 程式碼

#include <bits/stdc++.h>
#include <unordered_set>
using namespace std;
#define spIO ios_base::sync_with_stdio(false);cin.tie(0)
typedef long long ll;
ll m, n;
unordered_multiset<ll> us;
vector<ll> v;
int main(){
    spIO;
    cin >> m >> n;
    string s;
    ll t;
    for (int i = 0; i < n; i++){
        cin >> s; t = 0;
        for (int j = 0; j < s.size(); j++)
        {
            if (s[j] <= 'Z')
                t |= ((ll)1 << (s[j] - 'A'));
            else
                t |= ((ll)1 << (s[j] - 'a' + 26));
        }
        us.insert(t);
        v.push_back(t);
    }
    ll ans = 0, now;
    for (int i = 0; i < n; i++)
    {
        now = (((ll)1 << m) - 1) ^ v[i];
        ans += us.count(now);
    }
    cout << ans / 2;
}
更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay