牛客网 - SHTMYCBDFTT(异或)

题目链接:https://ac.nowcoder.com/acm/contest/393/B
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld

题目描述

注意本题有模数
给定一个长度为 n 的序列{a},求:
max 1≤i≤j≤n{(ai⊕ai+1⊕⋯⊕aj)+(ai+ai+1+⋯+aj)}mod100000007
其中 ⊕ 表示异或

输入描述:

第一行一个整数 n 。
第二行 n 个整数,表示 ai。

输出描述:

一行一个整数 ans,表示答案。

输入

3
1 2 3

输出

6

说明

我们 显然需要将所有的数字都选上,此时 ans=(1⊕2⊕3)+1+2+3=6.

备注:

对于所有的数据,保证 1≤n≤3×10^5,0≤ai<2^20。
样例:想不到吧,你的做法至少能过样例!

解题思路

我们很容易知道a^b>=a-b,即a^b+b>=a。当我们遇到一个数b的时候,如果我们不选b的话,到最后就加上一个ans2,如果选的话,我们就会加上ans2^b+b,由上可知ans2^b+b>=ans2。说明ans2=ans2^b之后有可能会使ans2变小,但是ans1会多加上一个b,所以只要遇到一个数就要把它全加上。

#include <stdio.h>
int main() {
    int n, m;
    long long ans1, ans2;
    while (~scanf("%d", &n)) {
        ans1 = ans2 = 0;
        for (int i = 0; i < n; i++) {
            scanf("%d", &m);
            ans1 += 1ll * m;
            ans2 ^= 1ll * m;
        }
        printf("%lld\n", (ans1 + ans2) % 100000007);
    }
    return 0;
}
全部评论

相关推荐

11-28 16:00
已编辑
武汉理工大学 Java
想干测开的tomca...:这份简历是“短期项目硬堆中大型系统技术”的“技术炫技式造假模板”,槽点密集到能当反面教材: ### 1. 「项目时长」和「技术密度」严重脱节,造假痕迹焊死在简历上 两个项目时长分别是**3个月、2个月**,但堆了Spring AI、Elasticsearch、MinIO、Kafka、ShardingSphere、Docker、Sentinel等近20个中大型项目才用的技术——正常情况下,光把这些中间件的文档看完+环境搭好,3个月都不够,更别说实现“AI多轮对话、分库分表、RBAC权限、大模型调用”这些功能。 说白了:你这不是“做项目”,是把“后端技术栈清单”往项目里硬塞,明摆着“只调用了API,没碰过核心逻辑”。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务