关注
非常遗憾,没有弄懂题主“按位或”一题的思路。我将代码调成如下形式以便于查看内部的运算步骤 #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
相关推荐
03-02 08:18
集美大学 Java 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你感受到金三银四了嘛? #
29623次浏览 314人参与
# 25届网易互娱暑实进度 #
98996次浏览 768人参与
# 今天你投了哪些公司? #
50875次浏览 1103人参与
# 26届的你们有几段实习? #
169794次浏览 1099人参与
# 春招 / 实习投递,你最焦虑的一件事 #
28521次浏览 641人参与
# 米哈游笔试 #
537405次浏览 981人参与
# Tplink求职进展汇总 #
206203次浏览 948人参与
# 虽然0面试,但今天___,夸夸自己 #
2464次浏览 74人参与
# AI项目实战 #
2532次浏览 122人参与
# 为了实习逃课值吗? #
69018次浏览 536人参与
# 如果给AI员工评绩效,我的答案是…… #
4048次浏览 98人参与
# HR问:你期望的薪资是多少?如何回答 #
82828次浏览 711人参与
# 今年找实习到底有多难? #
8804次浏览 94人参与
# 27届求职交流 #
41865次浏览 858人参与
# 大城市找工作会更容易吗 #
61930次浏览 390人参与
# 哪一刻你对工作祛魅了? #
9291次浏览 102人参与
# 找工作,你都让AI帮你做什么? #
2536次浏览 104人参与
# AI时代下,你的岗位要求有什么变化? #
4544次浏览 99人参与
# 26届求职交流 #
21562次浏览 536人参与
# 签约/解约注意事项 #
886987次浏览 4713人参与