考虑不限制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=0,f=1;char c;while(c=getchar(),!isdigit(c))f=c=='-'?-1:1;while(isdigit(c))ret=ret*10+c-'0',c=getchar();return ret*f;
    }const int MOD = 1000000007;
    const int MAXN = 4096;
    int n,m;long long f[MAXN][2],g[MAXN][2];
    long long ans;int main(){n=rd();m=rd();int mx=max(n,m),tmp=mx;int len=0;while(tmp){len++;tmp>>=1;}for(int k=1;k<=len;k++){memset(f,0,sizeof(f));f[0][0]=1;for(int i=1;i<=mx;i++){memcpy(g,f,sizeof(f));for(int s=mx<<1;s>=0;s--){if(i<=n){f[s][0]+=g[s^i][0];f[s][1]+=g[s^i][1];}if(i<=m){f[s][0]+=g[s^i][(i>>(k-1))&1];f[s][1]+=g[s^i][((i>>(k-1))+1)&1];}f[s][0]%=MOD;f[s][1]%=MOD;}}for(int i=(1<<(k-1));i<(1<<k);i++){ans+=f[i][1];}ans%=MOD;}cout<<ans;return 0;
    }

转载于:https://www.cnblogs.com/ghostcai/p/9606214.html

[51nod] 1301 集合异或和相关推荐

  1. 51nod 1301 集合异或和 动态规划

    题意 已知两个整数N与M,你需要构造两个整数集合X与Y,且需要满足以下要求: (1)对所有的xi∈X,满足1<=xi<=N;对所有的yj∈Y,满足1<=yj<=M; (X与Y可 ...

  2. 51nod 1301 集合异或和

    已知两个整数N与M,你需要构造两个整数集合X与Y,且需要满足以下要求: (1)对所有的xi∈X,满足1<=xi<=N;对所有的yj∈Y,满足1<=yj<=M; (X与Y可以为空 ...

  3. 51Nod 2128 前缀异或 c/c++题解

    题目描述 输入一个长度为n(1 <= n <= 100000)数组a[1], a[2], -, a[n]. 输入一个询问数m(1 <= m <= 100000)和m组询问,每组 ...

  4. Python set集合 - Python零基础入门教程

    目录 一.set 集合简介 二.set 集合常用函数 三.set 集合运算符 四.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 在 ...

  5. [转载] python set大小_python set集合

    参考链接: Python集合set Python set集合 最后更新于:2020-03-21 12:06:03 在python变量中除了以前文章所提到的整形int / 浮点数float / 布尔值b ...

  6. Python 集合 — set

    引言 set(集合)虽然用的很少,但它是一个无序的不重复元素序列,用来简单的去重挺快的. 集合的定义 set(集合) 与列表类似,不同之处在于集合的 元素不重复 集合和字典一样也是用 {} 定义,但元 ...

  7. matlab中集合的表示,Matlab常用命令集合

    1.常用命令-->管理命令和函数 addpath添加目录到MATLAB搜索路径doc在Web浏览器上现实HTML文档help显示Matlab命令和M文件的在线帮助helpwin helpdesk ...

  8. Python ^异或

    异或运算符: ^ 数值异或 a=100 b=200 a^b Out[46]: 172 将数值转换成二进制形式: bin(a) Out[47]: '0b1100100' bin(b) Out[48]: ...

  9. Matlab中向量的交集、并集、差集等集合运算

    学习Matlab一定要查看help文档啊啊啊 一.集合运算的函数如下: intersect(A, B):集合交集,A和B均为向量 union(A, B) :集合并集 setdiff(A, B) :集合 ...

最新文章

  1. ASP.Net中MD5加密-16位32位
  2. 多目标决策问题1.1.1:线性加权法——熵权法确定权重
  3. python和c-在python和C之间进行通信
  4. Java操作Redis服务
  5. linux c语言 readline,Linux C代码实现读取配置文件示例
  6. docker 操作 记录
  7. 支付宝「集五福」的阳谋
  8. 美国“四院院士”特伦斯谈人工智能“瓶颈”:远未达极限,数学家已经有了实现AI可解释性的理论工具...
  9. mac下workbench轻松搭建(drools 7.11.0.Final版本)
  10. Oracle读取log日志,使用log miner 分析oracle日志
  11. SignalR 跨域解决方案全面
  12. win10好用的C语言软件,9款超级实用的Win10软件,一定要收藏,简直不要太好用
  13. 华三comware跳槽_H3C Comware
  14. 主图指标,原创极强黄点,将军柱和黄金柱都是3日的
  15. centos 确定cpu是arm 还是x86_x86,I386,i686, x86_64, x64,amd64、Windows Linux AIX下查看CPU位数和操作系统位数、rpm包名...
  16. dfs、bfs的终于弄明白了
  17. java访问domino数据库_关于Java与Domino数据库之间的操作
  18. 2022年上海应届生落户公司要求!打分不够72的同学可以考虑!
  19. 深入编程之QQ盗号核心代码
  20. 数据分析案例-足球运动员分析

热门文章

  1. 20220202--CTF刷题MISC方向--第5题--反编译
  2. java语言语法--- Java标识符(标识符命名规则)、Java关键字、Java变量(变量的声明、赋值、使用)和常量(字符常量、字面常量)(包括Java字节码文件反汇编命令javap)
  3. “美登杯”上海市高校大学生程序设计邀请赛 **D. 小花梨的取石子游戏**
  4. netty源码解解析(4.0)-3 Channel的抽象实现
  5. easyui中的option设置selected没有效果
  6. Centos 解压命令
  7. findbugs教程
  8. Python学习笔记(二)——高级特性
  9. C#调用C++DLL传递结构体数组的终极解决方案
  10. 敏捷大观园 - 视频分享第6弹!