Cowpatibility
题面

题意
有n头奶牛,每一头奶牛喜欢5种口味,如果有两头奶牛5中口味各不相同的话,我们就说这两头奶牛是不相似。问有多少队奶牛不相似呢?
分析
这题N的范围是5e4,明显二重循环是tle,所以暴力模拟是肯定行不通的,那我们就需要换一种思路。
需要用到map数据结构以及bitset
注意:使用sring对象初始化bitset对象的时候,string对象直接表示为位模式。所以从string对象读入位集的顺序是从右向左
把n头牛的口味全部用二进制来储存,然后利用容斥原理来求解

AC代码

#include<bits/stdc++.h>
using namespace std;
int a[50005][7];
long long ans=0;
const int N=50005;
map<int,bitset<N> >m;
int main(){
int n;
bitset<N> p;
cin>>n;
for(int i=1;i<=n;i++){
    for(int j=1;j<=5;j++){
       cin>>a[i][j];
       m[a[i][j]].set(i);
    }
}
for(int i=1;i<=n;i++){
    p.reset();
    for(int j=1;j<=5;j++){
        p|=m[a[i][j]];
    }
    ans=ans+n-p.count();
}
cout<<(ans/2)<<endl;
return 0;
}