5373. 中等计算

文章目录

Question

给定一个长度为 n

的非负整数序列 a1,a2,...,an

对于 1≤i≤n

,有 bi=ai⊕(imod1)⊕(imod2)⊕...⊕(imodn)

请你计算并输出 b1⊕b2⊕...⊕bn

的值。

表示按位异或。

输入格式

第一行包含整数 n

第二行包含 n

个整数 a1,a2,...,an

输出格式

一个整数,表示 b1⊕b2⊕...⊕bn

的值。

数据范围

前 3

个测试点满足 1≤n≤3

所有测试点满足 1≤n≤106

,0≤ai≤2×109

输入样例:

3

1 2 3

输出样例:

3

Ideas

Code

cpp 复制代码
// 时间复杂度需要控制在O(N)或者O(nlgn)
// 将计算结果的矩阵写出来,尝试找规律,发现竖着有规律
// 规律为,第一列取模结果均为0000,第二列为0101,第三列为0120...以此循环
// 根据异或运算的性质(交换律、X^X=0)可以得出如果循环序列循环k次,k为偶数就等于0
// 所以只需要判断k是否奇数,还需要处理循环序列的最后的部分,最后一个元素为n%i(i为列号)
// 可以预处理一个前缀和数组s[i],表示1^2...^n; s[0] = 0
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 1000010;

int n;
int s[N];

int main()
{
    scanf("%d", &n);
    for (int i = 1; i <= n; i ++ ) s[i] = s[i - 1] ^ i;

    int res = 0;
    for (int i = 0; i < n; i ++ )
    {
        int a;
        scanf("%d", &a);
        res ^= a;
    }

    for (int i = 1; i <= n; i ++ )
    {
        int k = n / i; 
        if (k & 1) res ^= s[i - 1];
        res ^= s[n % i];
    }

    printf("%d\n", res);
    return 0;
}
相关推荐
混迹中的咸鱼2 分钟前
游戏开发核心架构指南
c++·游戏·架构
Stick_ZYZ5 分钟前
从 Prompt 到 Context Engineering:Agent 真正稳定的关键
大数据·人工智能·算法·ai·prompt
ZHW_AI课题组9 分钟前
使用Stable Diffusion v1.5文本引导与无分类器引导(CFG)算法实现条件生成图片
人工智能·python·算法·机器学习·stable diffusion
xxwxx__9 分钟前
栈(Stack)详解:概念、实现与避坑指南
c语言·数据结构
-凌凌漆-12 分钟前
【Qt】C++中protected与private的区别
开发语言·c++·qt
草莓熊Lotso19 分钟前
【Linux网络】深入理解 HTTP 协议(四):完善 C++ HTTP 服务器:从协议原理到生产级实现
linux·运维·服务器·c语言·网络·c++·http
黎阳之光20 分钟前
数字孪生赋能智慧油站建设|黎阳之光全场景可视化安防管控平台落地应用
大数据·物联网·算法·安全·数字孪生
牛油果子哥q22 分钟前
【C++前置声明与头文件】C++前置声明与头文件深度精讲:重复包含、循环依赖、重复定义报错、工程编译架构与实战解决方案
开发语言·c++
少司府22 分钟前
C++进阶:map和set的使用
开发语言·数据结构·c++·容器·stl·set·map
程序喵大人24 分钟前
C++ 程序员转型 AI Infra 学习路线
c++·人工智能·学习·ai infra