我是一个c++的新手。我尝试了一个与bitsets(https:/www.codechef.comproblemsCHEFQUE),当我使用下面的嵌套语句时,代码通过了所有的测试。
for(int i=1;i<Q+1;i++){
temp = S/2;
if(S&1){ //odd
if(!sets[temp]){
sets[temp] = true;
sum+=temp;
}
}
else{ //even
if(sets[temp]){
sets[temp] = false;
sum-=temp;
}
}
S = (A*S + B);
但是当我把多个if-else语句组合在一起时,在一些测试上失败了。
for(int i=1;i<Q+1;i++){
temp = S/2;
if(S&1 && !sets[temp]){ //odd and empty
sets[temp] = true;
sum+=temp;
}
else if(!S&1 && sets[temp]){ //even ond occupied
sets[temp] = false;
sum-=temp;
}
S = (A*S + B);
}
我真的不知道为什么会出现这种情况,我相信一定是非常愚蠢的。如果有人能帮助我,我真的很感谢。
正如你可以看到的 本表 经营者 !
优先于 &
(Bitwise and, not address of),所以你的代码应该是这样的。
for(int i=1;i<Q+1;i++){
temp = S/2;
if(S&1 && !sets[temp]){ //odd and empty
sets[temp] = true;
sum+=temp;
}
else if(!(S&1) && sets[temp]){ //even ond occupied
sets[temp] = false;
sum-=temp;
}
S = (A*S + B);
}