T2 的做法真多……
没想到啊……我以为正解是子集求和……
因为看 时,
,那么看
时,
。然后就变成了简短的代码
int n = readint(), m = readint();
for(int i=1,x; i<=n; ++i){
x = (1<<MaxN)-1-readint();
++ dp[x];
}
for(int i=0; i<MaxN; ++i)
for(int j=0; j<(1<<MaxN); ++j)
if(j>>i&1)
dp[j] += dp[j^(1<<i)];
for(int i=1,x; i<=m; ++i){
x = (1<<MaxN)-1-readint();
puts(dp[x] ? "yes" : "no");
} 然而身旁的队长告诉我,既然是判断 或
,只需要直接大傻叉
(或者用
实现同样的功能)就行了……
再然后,身后的法国人,子集枚举过掉了?又有身后的队霸, 左右子树都递归,还是随便切?
建议出题人反省一下,为什么不求有多少个数包含之,为什么数据极其强悍?
