题目:U109897 [HDU5536]Chip Factory
不求AC,只想知道RE的原因,求大佬帮忙。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,a[1005],tri[20000005][2],pot,fas[20000005],cnt[20000005],pos[20000005],vist[20000005];
inline void insert(ll k){
ll p=0;
for(ll i=32;i>=0;i--){
ll to=k>>i&1;
if(!tri[p][to])tri[p][to]=++pot;
fas[tri[p][to]]=p;
p=tri[p][to];
}
cnt[p]++;pos[k]=p;
}
inline ll query(ll k){
ll p=0,res=0;
for(ll i=32;i>=0;i--){
ll to=k>>i&1;
if(tri[p][to^1]&&!vist[tri[p][to^1]]){
res+=1ll<<i;
p=tri[p][to^1];
}
else p=tri[p][to];
}
return res;
}
inline void modify(ll p,ll k){
// cout<<"p = "<<p<<endl;
vist[p]+=k;
ll asd=0;
if(tri[fas[p]][0])asd++;
if(tri[fas[p]][1])asd++;
if(asd==2||cnt[fas[p]])return;
modify(fas[p],k);
}
signed main(){
ios::sync_with_stdio(false);
cin>>n;
for(ll i=1;i<=n;i++)cin>>a[i];
for(ll i=1;i<n;i++)
for(ll j=i+1;j<=n;j++){
insert(a[i]+a[j]);
// cout<<"insert : "<<a[i]+a[j]<<endl;
}
ll ans=0;
for(ll i=1;i<=n;i++){
// cout<<"i = "<<i<<" -------------------------"<<endl;
for(ll j=1;j<=n;j++){
if(i==j)continue;
if(cnt[a[i]+a[j]]<=1){
// cout<<"modify+ : "<<a[i]+a[j]<<endl;
modify(pos[a[i]+a[j]],1);
}
}
ans=max(ans,query(a[i]));
for(ll j=1;j<=n;j++){
if(i==j)continue;
if(cnt[a[i]+a[j]]<=1){
// cout<<"modify- : "<<a[i]+a[j]<<endl;
modify(pos[a[i]+a[j]],-1);
}
}
}
cout<<ans;
return 0;
}