关注
非常遗憾,没有弄懂题主“按位或”一题的思路。我将代码调成如下形式以便于查看内部的运算步骤 #include<cstdio>
#include<iostream>
#include<bitset>
using namespace std;
int p[10] = {0};
int mx = 10 ;
int q ;
int main()
{
scanf("%d",&q) ;
while(q--) {
int op , x;scanf("%d%d",&op,&x) ;
if(op == 1) {
bitset<4> b_x(x);
cout << "x = " << b_x << endl;
if(p[x] == x){
printf("p[%d] == %d", x, x);
continue;
}
int s = mx ^ x;
bitset<4> b_s(s);
bitset<4> b_mx(mx);
cout << "mx ^ x = "<< b_mx << " ^ " << b_x << " = " << b_s << endl;
for(int i = s ; i ; i = (i - 1) & s) {
bitset<4> b_i(i);
bitset<4> b_pbefore(p[i ^ x]);
bitset<4> b_ix(i ^ x);
p[i ^ x] |= x ;
bitset<4> b_pafter(p[i ^ x]);
cout << "p[i ^ x] = p[i ^ x] | x ="<< "p[ "<< b_ix<<" ] | "<< b_x <<" = " << "p[ "<< (i ^ x) <<" ] | "<< x <<" = "<< b_pbefore << " | " << b_x << " = " << b_pafter<< endl;
}
p[x] = x;
}
else {
if(p[x] == x) puts("YES") ;
else puts("NO");
}
}
return 0;
} 然后得到了如下输出: 10
1 4
x = 0100
mx ^ x = 1010 ^ 0100 = 1110
p[i ^ x] = p[i ^ x] | x =p[ 1010 ] | 0100 = p[ 10 ] | 4 = 1001 | 0100 = 1101
p[i ^ x] = p[i ^ x] | x =p[ 1000 ] | 0100 = p[ 8 ] | 4 = 0000 | 0100 = 0100
p[i ^ x] = p[i ^ x] | x =p[ 1110 ] | 0100 = p[ 14 ] | 4 = 0000 | 0100 = 0100
p[i ^ x] = p[i ^ x] | x =p[ 1100 ] | 0100 = p[ 12 ] | 4 = 0000 | 0100 = 0100
p[i ^ x] = p[i ^ x] | x =p[ 0010 ] | 0100 = p[ 2 ] | 4 = 0000 | 0100 = 0100
p[i ^ x] = p[i ^ x] | x =p[ 0000 ] | 0100 = p[ 0 ] | 4 = 0000 | 0100 = 0100
p[i ^ x] = p[i ^ x] | x =p[ 0110 ] | 0100 = p[ 6 ] | 4 = 0000 | 0100 = 0100
2 5
NO
1 9
x = 1001
mx ^ x = 1010 ^ 1001 = 0011
p[i ^ x] = p[i ^ x] | x =p[ 1010 ] | 1001 = p[ 10 ] | 9 = 1011 | 1001 = 1011
p[i ^ x] = p[i ^ x] | x =p[ 1011 ] | 1001 = p[ 11 ] | 9 = 0000 | 1001 = 1001
p[i ^ x] = p[i ^ x] | x =p[ 1000 ] | 1001 = p[ 8 ] | 9 = 0100 | 1001 = 1101
1 15
x = 1111
mx ^ x = 1010 ^ 1111 = 0101
p[i ^ x] = p[i ^ x] | x =p[ 1010 ] | 1111 = p[ 10 ] | 15 = 1010 | 1111 = 1111
p[i ^ x] = p[i ^ x] | x =p[ 1011 ] | 1111 = p[ 11 ] | 15 = 1001 | 1111 = 1111
p[i ^ x] = p[i ^ x] | x =p[ 1110 ] | 1111 = p[ 14 ] | 15 = 0100 | 1111 = 1111
2 4
YES
1 11
x = 1011
mx ^ x = 1010 ^ 1011 = 0001
p[i ^ x] = p[i ^ x] | x =p[ 1010 ] | 1011 = p[ 10 ] | 11 = 1101 | 1011 = 1111
2 10
NO
2 7
NO
2 9
YES
2 4
YES 我不清楚int s = mx ^ x;一句的含义。不清楚如下循环的含义 for(int i = s ; i ; i = (i - 1) & s) {
p[i ^ x] |= x ;
} 以及上述循环为什么在4输入时,将p[10, 8, 14, 12, 2, 0, 6]依次赋值,后者的值是前者对x的异或。
查看原帖
点赞 1
相关推荐
牛客热帖
更多
正在热议
更多
# 你的mentor是什么样的人? #
9560次浏览 80人参与
# 毕业租房也有小确幸 #
139957次浏览 4488人参与
# 未岚大陆求职进展汇总 #
38801次浏览 119人参与
# 帮我看看,领导说这话什么意思? #
11856次浏览 73人参与
# 租房前辈的忠告 #
258688次浏览 7112人参与
# 怎么给家人解释你的工作? #
5554次浏览 46人参与
# 平安产险科技校招 #
2567次浏览 0人参与
# 牛友的志愿填报指南 #
33082次浏览 173人参与
# 得物app工作体验 #
26678次浏览 57人参与
# 求职低谷期你是怎么度过的 #
8912次浏览 168人参与
# 26届秋招公司红黑榜 #
21362次浏览 77人参与
# 你觉得mentor喜欢什么样的实习生 #
14110次浏览 374人参与
# 校招泡的最久的公司是哪家? #
8650次浏览 49人参与
# 国企还是互联网,你怎么选? #
166505次浏览 1149人参与
# 求职中的尴尬瞬间 #
960次浏览 17人参与
# 从哪些方向判断这个offer值不值得去? #
10136次浏览 117人参与
# 度小满求职进展汇总 #
11510次浏览 61人参与
# 没有家庭托举的我是怎么找工作的 #
16529次浏览 200人参与
# 牛客树洞,我想对你说 #
3367次浏览 58人参与
# 实习必须要去大厂吗? #
148827次浏览 1551人参与
# 关于求职,我有X不投 #
39364次浏览 214人参与
# 你怀疑过自己的专业选择吗? #
24599次浏览 206人参与