Description
定义集合xor操作 A xor B=A∪B-A∩B。
问有多少对(P,Q)满足 P∈A Q∈B 使得 (P xor A)xor(Q xor B)=A xor B其中P Q都是集合。
答案对1e9+7取模。
例如:A ={1} ,B={1,2},A xor B = {2},枚举所有情况P Q有2种。
Solution
我们把两个集合想象成0,1的二进制状态,
首先这两个数值不存在某一位同时为0,(否则无意义)
我们发现,当两位分别为0,1时,只有1种方案(P∈A,Q∈B),
当两位都为1是,有两种方案,
所以
ans=2|A∩B|
。
复杂度:
O(log(|A∩B|))
Code
#include <cstdio>
using namespace std;
typedef long long LL;
const int mo=1e9+7;
LL q,n,ans;
LL ksm(LL q,LL w){return w?(ksm(q*q%mo,w>>1)*(w%2?q:1)%mo):1;}
int main()
{
scanf("%lld%lld%lld",&q,&q,&n);
printf("%lld\n",ksm(2,n));
}