【乱搞】51Nod 1622 集合对

来源:互联网 发布:药监局数据库 编辑:程序博客网 时间:2024/06/08 00:56

题面在这里

数学题,看懂了就很好做。

下面给出证明:

首先,集合的异或操作是可以类比位运算的异或操作的。

对于一个集合A,可以给全集的每个元素赋一个01变量,表示是否在集合A中出现过

这样A xor B其实就是两个二进制数异或了

然后这个东西是满足交换律和结合律的

然后:

(P xor A) xor (Q xor B)=A xor B(P xor Q) xor (A xor B)=A xor BP xor Q=P=Q

又因为PA,QB所以P是AB的任意一个子集

所以答案就是2|AB|

示例程序:

#include<cstdio>typedef long long ll;const int tt=1e9+7;ll power(ll a,ll b){    ll w=a,res=1;    while (b){        if (b&1) res=res*w%tt;        w=w*w%tt;        b>>=1;    }    return res;}ll a,b,c;int main(){    scanf("%lld%lld%lld",&a,&b,&c);    printf("%lld",power(2,c));    return 0;}
原创粉丝点击