关注
非常遗憾,没有弄懂题主“按位或”一题的思路。我将代码调成如下形式以便于查看内部的运算步骤 #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
相关推荐
牛客热帖
正在热议
# 25届秋招总结 #
278294次浏览 2403人参与
# 如果实习可以转正,你会不会放弃秋招 #
206003次浏览 2807人参与
# 北方华创开奖 #
24495次浏览 263人参与
# 地方国企笔面经互助 #
3249次浏览 7人参与
# 学历or实习经历,哪个更重要 #
47280次浏览 368人参与
# 选完offer后,你后悔学本专业吗 #
16525次浏览 120人参与
# 如何一边实习一边秋招 #
989025次浏览 12623人参与
# 软开人,秋招你打算投哪些公司呢 #
41579次浏览 534人参与
# 数据人的面试交流地 #
436216次浏览 7811人参与
# 0offer是寒冬太冷还是我太菜 #
892528次浏览 7963人参与
# 得物求职进展汇总 #
64820次浏览 674人参与
# 求职遇到的搞笑事件 #
68967次浏览 571人参与
# 你觉得专业和学校哪个对薪资影响最大 #
28897次浏览 215人参与
# 查收我的offer竞争力报告 #
21184次浏览 263人参与
# 你最想要的公司福利是? #
43391次浏览 160人参与
# 没有实习经历,还有机会进大厂吗 #
808852次浏览 13883人参与
# 来聊聊机械薪资天花板是哪家 #
67420次浏览 460人参与
# 当你面对裁员会如何? #
26508次浏览 155人参与
# 一觉醒来,我觉醒了超级打工人系统 #
3605次浏览 37人参与
# 应届生被毁约被毁意向了怎么办 #
28822次浏览 246人参与
# 面试体验感最好的是哪家? #
84153次浏览 822人参与