考虑不限制xor{Y}>xor{X}

  • 考虑n=m的情况,每个数i∈[1,n]可以被分配到X集合或Y集合,或不分配
  • 设f[S]表示{X} xor {Y} == S的方案数
  • 有f[S]+=2*f[S^i]
  • 考虑n!=m,那就是多余的部分得强制分配,分开两个转移即可

考虑限制xor{Y}>xor{X}

  • 对于数B>A,在二进制表示下,就是B和A的前面相等,直到某一位B为1,A为0,之后无所谓
  • 枚举这一位k,限制B(xor{Y})第k位为1,且B xor A第k位为0(统计答案限制范围)
  • 状态加一维f[S][0/1]表示A xor B==S且B的第k位是0/1
  • 转移分开讨论两个情况
  • 1.放进X集合,直接继承状态
  • 2.放进Y集合,根据i第k位转移
    #include<iostream>
    #include<cstring>
    #include<cstdio> using namespace std; inline int rd(){
    int ret=,f=;char c;
    while(c=getchar(),!isdigit(c))f=c=='-'?-:;
    while(isdigit(c))ret=ret*+c-'',c=getchar();
    return ret*f;
    } const int MOD = ;
    const int MAXN = ;
    int n,m; long long f[MAXN][],g[MAXN][];
    long long ans; int main(){
    n=rd();m=rd();
    int mx=max(n,m),tmp=mx;
    int len=;
    while(tmp){len++;tmp>>=;}
    for(int k=;k<=len;k++){
    memset(f,,sizeof(f));
    f[][]=;
    for(int i=;i<=mx;i++){
    memcpy(g,f,sizeof(f));
    for(int s=mx<<;s>=;s--){
    if(i<=n){
    f[s][]+=g[s^i][];
    f[s][]+=g[s^i][];
    }
    if(i<=m){
    f[s][]+=g[s^i][(i>>(k-))&];
    f[s][]+=g[s^i][((i>>(k-))+)&];
    }
    f[s][]%=MOD;f[s][]%=MOD;
    }
    }
    for(int i=(<<(k-));i<(<<k);i++){
    ans+=f[i][];
    }
    ans%=MOD;
    }
    cout<<ans;
    return ;
    }

[51nod] 1301 集合异或和的更多相关文章

  1. 51nod 1301 集合异或和——异或dp

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1301 好题!看了TJ才会. 因为是不可重集合,所以当然有前 i 个 ...

  2. 51Nod 1301 集合异或和 —— 异或DP

    题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1301 参考博客:https://blog.csdn.net/qq_ ...

  3. 51nod 1301 集合异或和(DP)

    因为当\(A<B\)时,会存在在二进制下的一位,满足这一位B的这一位是\(1\),\(A\)的这一位是\(0\). 我们枚举最大的这一位.设为\(x\)吧. 设计状态.\(dp[i][j][1/ ...

  4. [51Nod 1301] 集合异或和 (dp)

    传送门 Solution 一道比较好的dp题 想了半天组合数QAQ 首先要知道的是 A<B一定是B有一位是1且A的这位是0且前面都相等 那么肯定是要枚举这一位在哪里然后求出方案数 方案数考虑类似 ...

  5. 51Nod 1352 集合计数(扩展欧几里德)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1352 题目大意: 给出N个固定集合{1,N},{2,N-1} ...

  6. 51nod 1622 集合对[算法马拉松19 C]

    题目链接:https://www.51nod.com/contest/problem.html#!problemId=1622 第一次参加算法马拉松,我就是去看大神们疯狂秒题,然后感受绝望的orz.. ...

  7. 51Nod 1352 集合计数 扩展欧几里得

    基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个固定集合{1,N},{2,N-1},{3,N-2},...,{N-1,2},{N,1}.求出有多少个集合满足 ...

  8. 51nod 1551 集合交易 最大权闭合子图

    题意: 市场中有n个集合在卖.我们想买到满足以下要求的一些集合,所买到集合的个数要等于所有买到的集合合并后的元素的个数. 每个集合有相应的价格,要使买到的集合花费最小. 这里我们的集合有一个特点:对于 ...

  9. MATLAB中的集合运算

    matlab里关于集合运算和二进制数的运算的函数 intersect:集合交集ismember :是否集合中元素setdiff :集合差集setxor :集合异或(不在交集中的元素)union :两个 ...

随机推荐

  1. 36小时极客嘉年华!FISCO BCOS黑客马拉松报名启动

    FISCO BCOS是完全开源的联盟区块链底层技术平台,由金融区块链合作联盟(深圳)(简称金链盟)成立开源工作组通力打造.开源工作组成员包括博彦科技.华为.深证通.神州数码.四方精创.腾讯.微众银行. ...

  2. link-1-STL 标准模板库

    STL(Standard Template Library,标准模版库)是C++语⾔言标准中的重要组成部分.STL以模板类和模版函数的形式为程序员提供了了各种数据结构和算法的实现,程序员吐过能够充分的 ...

  3. java CDI

    Scope声明周期 http://www.cnblogs.com/yjmyzz/p/javaee-cdi-bean-scope.html

  4. Codeforces Round #561 (Div. 2) A. Silent Classroom

    链接:https://codeforces.com/contest/1166/problem/A 题意: There are nn students in the first grade of Nlo ...

  5. NOI2015品酒大会 后缀数组

    自己尝试敲后缀数组,发现难看(tiao)的不行,于是抄了板子 考虑建出hei以后转化出的问题: 对于一个数组中权值大于等于k的连续部分,求取两个数的方案数和两数积的最大值 (好气啊,可以有负数) 把询 ...

  6. CountDownLatch MyUncaughtExceptionHandler

    package com.yd.wmsc.util; import java.text.SimpleDateFormat; import java.util.Date; import java.util ...

  7. GUI的最终选择 Tkinter(七):菜单Menu组件、Menubutton组件、OptionMenu组件

    Menu组件 今天说的Menu组件就是一些菜单组件,开始点点点... Tkinter提供了一个Menu组件,可以实现顶级菜单,下拉菜单和弹出菜单.由于底层是代码实现和优化的,所以不太建议通过按钮和其他 ...

  8. Jmeter4.0----监控服务器性能(7)

    1.说明 JMeter是一款压力测试工具. 通常在压力测试中我们也需要监控和知道服务器的相关资源情况,jmeter本身不具备这个功能,今天我们主要说一下如何通过JMeter插件来监控服务器CPU.内存 ...

  9. Ubuntu下安装Yarm-PM2

    首先打开yarm的官网.https://www.yarnpkg.com/zh-Hant/ (一)yarn的官方安装方法: 1.上通过 Debian 套件安裝 Yarn,粘贴以下命令 curl -sS ...

  10. Spring-boot原理(附带实现一个spring-boot-starter实例和代码下载)

    ​ (我就是个封面) Spring-boot自出现后,到现在火的很,大家貌似都在用,连招聘里面也要求会这个.但是说实话,spring-boot无外乎想实现一种可插拔的编程方式,说是简化配置,其实并没有 ...