rt,我赛时这么写是错的:
ll trie[N][5],tot=0;
void insert(ll x){
ll root=0;
for(int i=24;i>=0;--i){
ll xx=(x>>i)&1;
if(!trie[root][xx]) trie[root][xx]=++tot;
root=trie[root][xx];
}
}
ll query(ll x){
ll root=0;
for(int i=24;i>=0;--i){
ll xx=(x>>i)&1,nx=((n-1)>>i)&1;
if(!nx){
if(trie[root][xx^1]) return 0;
root=trie[root][xx];
}
else root=trie[root][xx^1];
}
return 1;
}
但是把上面打问号的地方改成 =1 就对了?而且原来是输出的第二个数直接超出 n 了,求解答为什么QAQ