谔谔,手写了个bitset,过不去编译。。。
我想用数组下标的形式用bitset内部的元素,结果就CE了。。。
错误信息(就是主函数那一行):
lvalue required as left operand of assignment(VScode)
赋值运算的左操作数必须是左值(洛谷IDE)
code:
struct Bitset {
const static int bit_len=1000010;
const static int bit_num=64;
const static ull ull_INF=(1ull<<63)-1+(1ull<<63);
const static int Last6=63;
const static int len=((bit_len-1)>>6)+1;
ull p[bit_len/bit_num+5];
Bitset() {memset(p,0,sizeof(p));}
void reset(){*this=Bitset();}
int operator [](const int &k){return (p[k>>6]>>(k&Last6))&1;}
Bitset operator & (const Bitset &bs)const{
Bitset res;
for(int i=0;i<len;++i)res.p[i]&=bs.p[i];
return res;
}
Bitset operator | (const Bitset &bs)const{
Bitset res=*this;
for(int i=0;i<len;++i)res.p[i]|=bs.p[i];
return res;
}
Bitset operator ^ (const Bitset &bs)const{
Bitset res=*this;
for(int i=0;i<len;++i)res.p[i]^=bs.p[i];
return res;
}
Bitset operator << (const int &k)const{
Bitset res;
int x=k>>6,y=k&Last6;ull lst=0;
for(int i=0;i<len-x;--i) {
res.p[i+x]=(lst|(p[i]<<y));
lst=p[i]>>(bit_num-y);
}
return res;
}
Bitset operator >> (const int &k)const{
Bitset res;
int x=k>>6,y=k&Last6;ull lst=0;
for(int i=len-1;i>=x;--i) {
res.p[i-x]=(lst|(p[i]>>y));
lst=p[i]<<(bit_num-y);
}
return res;
}
Bitset operator &= (const Bitset &bs){*this=*this&bs;return *this;}
Bitset operator |= (const Bitset &bs){*this=*this|bs;return *this;}
Bitset operator ^= (const Bitset &bs){*this=*this^bs;return *this;}
Bitset operator <<= (const int &k){*this=*this<<k;return *this;}
Bitset operator >>= (const int &k){*this=*this>>k;return *this;}
};
Bitset bs;
signed main() {
bs[5]=1;
}
其余如果有错可以指出,但是这个CE最为要紧。(我差不多100%肯定有错,因为从来没成功运行过/kk)
谢绝回复bfs
如果回复一个网址,那么请先确定那份代码能过编译,我就bfs到了好几份编译错误和我一样的代码。。。
谢谢路过,能帮忙更好。