ABC141F

偶然找到的线性基好题。

考虑 s=xi,则此时 b=sa,问题变为 max(a+(sa))

然后观察 s,有一个很典的想法是,s0 的位上,a 如果是 0 则会产生 0 的贡献,否则产生 2s1 的位则稳定产生 1 的贡献,结合异或本质理解。

所以现在要求 xi 的一个子集的异或和中 s 所有 0 的位组成的值的 max。这显然是一个线性基,具体实现是将所有 x 按位与一个取反后的 s,再插入线性基。

code:

点击查看代码

int n,m;ll c[N];
struct XXJ{
ll a[63];
il void insert(ll x){
drep(i,59,0){
if(!(x>>i&1ll))continue;
if(a[i])x^=a[i];
else{a[i]=x;return;}
}
}
il ll query(ll x){
drep(i,59,0)if((xa[i])>x)x=xa[i];
return x;
}
}T;
void Yorushika(){
scanf("%d",&n);
ll sum=0;
rep(i,1,n)scanf("%lld",&c[i]),sum^=c[i];
rep(i,1,n)T.insert(c[i]&(~sum));
printf("%lld\n",2*T.query(sum)-sum);
}
signed main(){
int t=1;
// scanf("%d",&t);
while(t--)
Yorushika();
}

</details>
posted @   yinhee  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示