关注
非常遗憾,没有弄懂题主“按位或”一题的思路。我将代码调成如下形式以便于查看内部的运算步骤 #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
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 我来点评面试官 #
10311次浏览 78人参与
# 工作后,谈恋爱还和学生时代一样吗? #
39223次浏览 370人参与
# 360集团校招 #
1996次浏览 8人参与
# 同bg的你秋招战况如何? #
167495次浏览 972人参与
# 职场破冰,你们都聊什么? #
28582次浏览 151人参与
# 今年秋招是回暖还是遇冷 #
20803次浏览 134人参与
# 京东开奖 #
447107次浏览 2500人参与
# 阿里云工作体验 #
31724次浏览 108人参与
# 你的领导最像哪种动物,为什么? #
23959次浏览 133人参与
# 我的AI电子员工 #
20867次浏览 151人参与
# 三一集团提前批进度交流 #
40122次浏览 228人参与
# 诺瓦星云求职进展汇总 #
225568次浏览 1732人参与
# 毕业论文进行时 #
1984次浏览 34人参与
# 教师节,你送祝福了吗 #
11417次浏览 76人参与
# 来聊聊你目前的求职进展 #
686364次浏览 6921人参与
# 秋招开始捡漏了吗 #
61890次浏览 427人参与
# 你实习是赚钱了还是亏钱了? #
20267次浏览 183人参与
# 找工作八股要背到什么程度? #
11964次浏览 194人参与
# 用一句话形容你的团队氛围 #
13028次浏览 145人参与
# 上班摸鱼,你都在干些什么? #
29008次浏览 223人参与
# 三一重工求职进展汇总 #
22504次浏览 82人参与
# 你找工作是从容有余 or 匆忙滚爬? #
6988次浏览 72人参与

