Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
35020 | swzzzz | 【S】T3 | C++ | 解答错误 | 42 | 7 MS | 268 KB | 1255 | 2024-11-21 16:45:16 |
#include<bits/stdc++.h> using namespace std; #define N 105 #define ll long long int n; ll a[N]; ll p[N]; ll low[N],now; void insert(ll x){ for(int i=62;i>=0;i--){ if(x&(1ll<<(ll)i)){ if(p[i]){ x^=p[i]; }else{ p[i]=x; break; } } } } bool check(ll x,int ii,ll y){ for(int i=ii;i>=0;i--){ if((x^p[i])>x){ x^=p[i]; } } return x>y; } ll ask(ll x,ll y){ for(int i=62;i>=0;i--){ if((x>>(ll)i)&1){ bool tmp=check(x^(1ll<<(ll)i),i-1,y); if(tmp>y)x^=p[i];continue; } bool tmp=check(x,i-1,y); if(tmp<=y){ x^=p[i]; } } return x; } int main(){ ios::sync_with_stdio(0); cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; low[i]=1e18+114514; } low[0]=-1; for(int i=1;i<=n;i++){ for(int j=now;j>=0;j--){ ll tmp=ask(a[i],low[j]); if(tmp>low[j]){ if(j==now) now++; low[j+1]=min(tmp,low[j+1]); } } insert(a[i]); } cout<<now<<endl; return 0; }