博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Winter And Snowmen
阅读量:5080 次
发布时间:2019-06-12

本文共 1454 字,大约阅读时间需要 4 分钟。

暴力想法是:dp[i][s1][s2]前i个,第一个集合xor是s1,第二个集合xor是s2方案数O(n^3)

 

有xor

不妨按位考虑

枚举两个集合xor的LCP长度L

考虑从高到低前L位相同,第L+1位xor(X)=0,xor(Y)=1的方案数

剩下的低位就随便选择了

f[i][s][0/1][0/1]表示前i个数,前L位高位的xor和是s,第L+1位分别是0/1,0/1的方案数

每一个合法的方案都会被枚举到恰好一次。

复杂度:O(logn*n*(n/logn)=n^2)

代码:

(Topcoder还要class。。。)

#include
#define reg register int#define il inline#define numb (ch^'0')using namespace std;typedef long long ll;il void rd(int &x){ char ch;x=0;bool fl=false; while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true); for(x=numb;isdigit(ch=getchar());x=x*10+numb); (fl==true)&&(x=-x);} const int mod=1e9+7; const int N=2002; int n,m; int ans=0; int f[N][2049][2][2]; int mo(int x,int y){ return x+y>=mod?x+y-mod:x+y; }class WinterAndSnowmen {public: int getNumber(int n, int m) { int U=max(n,m); for(reg p=10;p>=0;--p){ memset(f,0,sizeof f); f[0][0][0][0]=1; for(reg i=0;i
>(p+1))][l1^((num>>p)&1)][l2]=mo(f[i+1][s^(num>>(p+1))][l1^((num>>p)&1)][l2],f[i][s][l1][l2]); if(i+1<=m)f[i+1][s^(num>>(p+1))][l1][l2^((num>>p)&1)]=mo(f[i+1][s^(num>>(p+1))][l1][l2^((num>>p)&1)],f[i][s][l1][l2]); } } } } ans=mo(ans,f[U][0][0][1]); } return ans; }};

 

转载于:https://www.cnblogs.com/Miracevin/p/10394199.html

你可能感兴趣的文章
互联网模式下我们更加应该“专注”
查看>>
myeclipse集成jdk、tomcat8、maven、svn
查看>>
查询消除重复行
查看>>
Win 10 文件浏览器无法打开
查看>>
HDU 1212 Big Number(C++ 大数取模)(java 大数类运用)
查看>>
-bash: xx: command not found 在有yum源情况下处理
查看>>
[leetcode]Minimum Path Sum
查看>>
内存管理 浅析 内存管理/内存优化技巧
查看>>
hiho1079 线段树区间改动离散化
查看>>
【BZOJ 5222】[Lydsy2017省队十连测]怪题
查看>>
第二次作业
查看>>
【input】 失去焦点时 显示默认值 focus blur ★★★★★
查看>>
Java跟Javac,package与import
查看>>
day-12 python实现简单线性回归和多元线性回归算法
查看>>
Json格式的字符串转换为正常显示的日期格式
查看>>
[转]使用 Razor 进行递归操作
查看>>
[转]Android xxx is not translated in yyy, zzz 的解决方法
查看>>
docker入门
查看>>
Android系统--输入系统(十一)Reader线程_简单处理
查看>>
监督学习模型分类 生成模型vs判别模型 概率模型vs非概率模型 参数模型vs非参数模型...
查看>>