关注
非常遗憾,没有弄懂题主“按位或”一题的思路。我将代码调成如下形式以便于查看内部的运算步骤 #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
相关推荐
点赞 评论 收藏
分享
2025-11-20 11:38
深圳大学 算法工程师 点赞 评论 收藏
分享
飞屋一号:你也两段实习撒,两人综合一下,万一真有面试官问起来,你就说你俩都一起实习的 点赞 评论 收藏
分享
查看10道真题和解析 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 实习的你做了哪些离谱的工作 #
1098次浏览 32人参与
# 工作压力大,你会干什么? #
1669次浏览 54人参与
# MiniMax求职进展汇总 #
1236次浏览 25人参与
# 我的付费上班经历 #
3708次浏览 78人参与
# 找实习记录 #
4113次浏览 89人参与
# 参加哪些竞赛对找工作有帮助? #
2241次浏览 44人参与
# 如果不上班,你会去做什么 #
1414次浏览 55人参与
# 邪修省钱套路 #
1365次浏览 52人参与
# AI让你的思考变深了还是变浅了? #
541次浏览 22人参与
# 毕业论文进行时 #
24685次浏览 146人参与
# 简历第一个项目做什么 #
1252次浏览 29人参与
# 为了入行xx岗,我学了__ #
1234次浏览 19人参与
# 毕业旅行去哪玩儿 #
21798次浏览 148人参与
# 24届软件开发秋招薪资爆料 #
411522次浏览 1276人参与
# 找实习是选平台还是选业务? #
40103次浏览 300人参与
# 你觉得面试是靠实力还是靠运气 #
27390次浏览 306人参与
# 哪些公司在招寒假实习? #
25875次浏览 355人参与
# 26届秋招投递记录 #
111311次浏览 658人参与
# 毕业后不工作的日子里我在做什么 #
226880次浏览 1683人参与
# 招聘要求与实际实习内容不符怎么办 #
150671次浏览 891人参与
# 硬件/芯片公司工作体验 #
142420次浏览 946人参与

