CF1635A Min Or Sum

发个严谨点的证明罢。

引理

x|yx+y 先搞个真值表出来:

a b a|b a+b
1 1 1 2
1 0 1 1
0 1 1 1
0 0 0 0

可以看出,对于任意二进制位 a,ba|ba+b

x 的第 k 个二进制位为 xk,则对于任意 x,yxk|ykxk+yk

(如果 x,y 位数不同,则在位数少的数前面补 0

我们有:x+y=2k(xk+yk),x|y=2k(xk|yk) 作差法比较大小:(x+y)(x|y)=2k(xk+yk)2k(xk|yk)=2k[(xk+yk)(xk|yk)]0 所以 x|yx+y

思路

因为 x|0=x,所以可以把 ai,aj 变成 ai|aj,0

ai|aj=(ai|aj)|0,符合题目要求)

这样做之后,原来的和 ai+aj 就变成了 ai|aj

根据引理可以知道 ai|ajai+aj,比原来更优。

于是就可以对 a1ai[2,n] 都执行一遍这个操作,

原数列就变成 a1|a2|a3|...|an,0,0,0...,不含有加法,是最小值。

代码

#include <cstdio>
int T, n, s, t;
int main()
{
    scanf("%d", &T);
    while(T--)
    {
        scanf("%d", &n);s = 0;
        while(n--) scanf("%d", &t), s |= t;
        printf("%d\n", s);
    }
    return 0;
}
posted @   Jijidawang  阅读(2)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示