[51nod] 1301 集合异或和
考虑不限制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 集合异或和的更多相关文章
- 51nod 1301 集合异或和——异或dp
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1301 好题!看了TJ才会. 因为是不可重集合,所以当然有前 i 个 ...
- 51Nod 1301 集合异或和 —— 异或DP
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1301 参考博客:https://blog.csdn.net/qq_ ...
- 51nod 1301 集合异或和(DP)
因为当\(A<B\)时,会存在在二进制下的一位,满足这一位B的这一位是\(1\),\(A\)的这一位是\(0\). 我们枚举最大的这一位.设为\(x\)吧. 设计状态.\(dp[i][j][1/ ...
- [51Nod 1301] 集合异或和 (dp)
传送门 Solution 一道比较好的dp题 想了半天组合数QAQ 首先要知道的是 A<B一定是B有一位是1且A的这位是0且前面都相等 那么肯定是要枚举这一位在哪里然后求出方案数 方案数考虑类似 ...
- 51Nod 1352 集合计数(扩展欧几里德)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1352 题目大意: 给出N个固定集合{1,N},{2,N-1} ...
- 51nod 1622 集合对[算法马拉松19 C]
题目链接:https://www.51nod.com/contest/problem.html#!problemId=1622 第一次参加算法马拉松,我就是去看大神们疯狂秒题,然后感受绝望的orz.. ...
- 51Nod 1352 集合计数 扩展欧几里得
基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个固定集合{1,N},{2,N-1},{3,N-2},...,{N-1,2},{N,1}.求出有多少个集合满足 ...
- 51nod 1551 集合交易 最大权闭合子图
题意: 市场中有n个集合在卖.我们想买到满足以下要求的一些集合,所买到集合的个数要等于所有买到的集合合并后的元素的个数. 每个集合有相应的价格,要使买到的集合花费最小. 这里我们的集合有一个特点:对于 ...
- MATLAB中的集合运算
matlab里关于集合运算和二进制数的运算的函数 intersect:集合交集ismember :是否集合中元素setdiff :集合差集setxor :集合异或(不在交集中的元素)union :两个 ...
随机推荐
- GFS安装
GlusterFS 搭建 1.环境要求 IP地址 主机名称 系统 172.16.2.201 test01 Centos 6.4 172.16.2.202 test02 Centos 6.4 172.1 ...
- jquery jtemplates.js模板渲染引擎的详细用法第二篇
jquery jtemplates.js模板渲染引擎的详细用法第二篇 关于jtemplates.js的用法在第一篇中已经讲过了,这里就直接上代码,不同之处是绑定模板的方式,这里讲模板的数据专门写一个t ...
- CF 1215解题报告
T1 偶数输出n/2 奇数输出(n-1)/2即可 T2 判断是不是回文 不是直接输出子串 是回文继续判断 如果他前(len+1)/2内没有相同 输出-1 其他的 交换不同字符,输出子串 T3 贪心+二 ...
- 洛谷P1002 过河卒
关于蒟蒻的我,刚刚接触DP.... 那么就来做一道简单DP吧.... 首先先看题: 题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一 ...
- Linux对外提供服务 网络操作 端口操作 1.开启服务监听端口 2.设置防火墙,放行访问端口的包 iptables&netfilter 四表五链和通堵策略
主题: Linux服务器上软件提供服务 1.网络操作 2.端口操作 1.网络操作 本机必须能够ping通目标主机(本地虚拟机或者远程主机) 2.端口操作 1.开启服务监听端口 2.设置防火墙,放行访问 ...
- gedit配置
编辑 \(\rightarrow\) 首选项 \(\rightarrow\) 插件 \(\rightarrow\) 外部工具 启用 进入工具 \(\rightarrow\) Manage Extern ...
- 【bzoj1503】[NOI2004]郁闷的出纳员
1503: [NOI2004]郁闷的出纳员 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 13890 Solved: 5086[Submit][Stat ...
- 微软官方NET Core 2.0
NET Core 2.0 微软官方发布的.NET Core 2.0相关的博客: Announcing .NET Standard 2.0 Announcing .NET Core 2.0 F# and ...
- 063 Unique Paths II 不同路径 II
这是“不同路径” 的进阶问题:现在考虑网格中有障碍物.那样将会有多少条不同的路径从左上角到右下角?网格中的障碍物和空位置分别用 1 和 0 来表示.例如,如下所示在 3x3 的网格中有一个障碍物.[ ...
- 数据库操作语法错误(SQL syntax error)之两步走
今天在做web应用操作数据库时出现了语法错误,提示的是在“xxxxxxx”附近出现了语法错误:CODE:Error: You have an error in your SQL syntax. Che ...