Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
35007 | baka24 | 【S】T3 | C++ | 通过 | 100 | 17 MS | 268 KB | 1498 | 2024-11-21 14:44:18 |
#include<bits/stdc++.h> using namespace std; #define int long long int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return x*f;} const int MAXN=110,N=62,inf=4000000000000000000; int n,a[MAXN]; struct xorji{ int p[N+5]; void insert(int x){ for(int i=N;i>=0;i--)if(x&(1ll<<i)){ if(!p[i]){p[i]=x;break;} else x^=p[i]; } } int check(int x,int y){ // cout<<x<<" "<<y<<":"; for(int i=x;i>=0;i--)if(!(y&(1ll<<i)))y^=p[i]; // cout<<y<<endl; return y; } int qry(int x,int y){ for(int i=N;i>=0;i--){ if(y&(1ll<<i)){ if(check(i-1,y^p[i])>x)y^=p[i]; } else { if(check(i-1,y)<=x)y^=p[i]; } } return y<=x?inf:y; } }T; int f[MAXN],g[MAXN]; void slv(){ n=read(); for(int i=1;i<=n;i++)a[i]=read(); memset(f,0x3f,sizeof(f)); f[0]=-1; for(int i=1;i<=n;i++){ memcpy(g,f,sizeof(f)); for(int j=1;j<=i;j++){ // cout<<tmp<<" "<<a[i]<<" "<<g[j-1]<<endl; f[j]=min(f[j],T.qry(g[j-1],a[i])); } T.insert(a[i]); // for(int j=0;j<=n;j++)cout<<f[j]<<" ";cout<<endl; } for(int i=n;~i;i--)if(f[i]<inf){ printf("%lld\n",i); return; } } signed main(){ slv(); return 0; }