基础算法题——异或(复杂度的小差异)

2023-11-06

异或

题目描述
给定一个长度为 n 初始全为 0 的数列 ai,下标从 1 开始。定义操作模 k 异或 v 为对所有满足 ki≡0(mod k) 的下标 i,将异或上整数v(即令 ai = ai⊕v)。

给出q次操作,每次操作之后输出序列的异或和,并且在操作结束之后输出整个序列。
序列的异或和为 a 1⊕a 2⊕…⊕an

输入描述:
第一行两个整数n,q。
接下来q行,每行两个整数 ki, vi。
1 ≤ n, q ≤ 2×105
1 ≤ ki, vi ≤ 109
输出描述:
输出共q+1行,其中前q行每行一个整数,为每次操作结束后的序列的异或和。
最后一行为操作结束后的序列。
示例1
输入
10 3
1 1
2 2
3 4
输出
0
2
6
1 3 5 3 1 7 1 3 5 3
备注:
i ≡ 0(modk) 等价于 i mod k = 0


求余知识点:
a ^ k = a ^ k ^ k ^ k
a = a ^ k ^ k

按照题目要求,写下如下代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int arr[200010];

int main(){
	int n, q;
	memset(arr, 0, sizeof(arr));
	scanf("%d%d", &n, &q);
	ll sum=0;
	for(int i=1; i<=q; i++){
		ll k, v;
		scanf("%d%d", &k, &v);
		for(int j=1; j<=n/k; j++)
			arr[j*k] = arr[j*k]^v;
		if(n/k%2)
			sum = sum^v;
		printf("%lld\n", sum);
	}
	
	for(int i=1; i<=n; i++){
		printf("%lld", arr[i]);
		if(i!=n) printf(" ");
	}
	
	return 0;
} 

复杂度为 O(n2)

修正后代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int arr[200010], ans[200010], n;

int main(){
	int q;
	memset(arr, 0, sizeof(arr));
	scanf("%d%d", &n, &q);
	ll sum=0;
	for(int i=1; i<=q; i++){
		ll k, v;
		scanf("%d%d", &k, &v);
		if(n>=k){
			arr[k] = arr[k]^v;
			if(n/k%2) sum = sum^v;
		}
		printf("%lld\n", sum);
	}
	
	for(int i=n; i>=1; i--){
		for(int j=i; j<=n; j+=i){
			ans[j] ^= arr[i];
		}
	}
	for(int i=1; i<=n; i++){
		printf("%d", ans[i]);
		if(i!=n)
			printf(" ");
	}
	
	return 0;
} 

复杂度为O( a*b ),其中(a+b=n)。
感觉复杂度并没有降低很多的样子…

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基础算法题——异或(复杂度的小差异) 的相关文章

随机推荐

  • Qt通过QProcess启动进程并传递命令行参数

    目录 QProcess 启动外部程序的两种方式 依赖式 分离式 启动进程前的预处理 设置启动路径 设置启动命令参数 启动的状态 更多说明 Public Functions Signals 设计一个拉起进程的程序 基本设计思路 效果图 核心代
  • 前端错误监控及前端错误上报

    window addEventListener unhandledrejection e gt console log error e throw e reason window addEventListener error errs gt
  • 2W+字系统讲解如何用Python自动化操作PPT,学懂这篇文章就够了

    大家好 之前给大家分享过用Python办公自动化系列 Python 自动化操作Excel PDF 今天给大家分享用Python自动化操作PPT 本文内容较长 喜欢记得关注 收藏 点赞 注 文末提供资料和交流方式 1 PPT自动化能干什么 有
  • 日志工厂

  • ajax如何获多个上传文件,Ajaxupload如何实现多文件上传操作

    Ajaxupload如何实现多文件上传操作 发布时间 2021 07 24 10 50 09 来源 亿速云 阅读 56 作者 小新 这篇文章主要介绍了Ajaxupload如何实现多文件上传操作 具有一定借鉴价值 感兴趣的朋友可以参考下 希望
  • 基于Simulink的ask,psk,fsk仿真

    基于Simulink的ask psk fsk仿真 本实验基于matlab的simulink 实验步骤如下 单极性基带信号和双极性基带信号 利用simulink中的Bernoulli Binary Generator可以产生随机的二进制信号
  • STL之queue

    queue是容器适配器 没有迭代器 queue的所有元素的进出都必须符合先进先出的条件 没有走访功能 STL中deque和list都可以作为queue的底层容器 缺省使用deque实现 ifndef STL LIMITED DEFAULT
  • CANN-AICPU算子开发

    1 算子 算子是一个函数空间到函数空间上的映射O X gt X 广义的讲 对任何函数进行某一项操作都可以认为是一个算子 在Caffe中 算子对应层中的计算逻辑 例如 卷积层中的卷积算法 是一个算子 全连接层中的权值求和过程 是一个算子 算子
  • php google gmail第三方登录

    生成秘钥 获取ID 秘钥 下载PHP SDK SDK链接 代码 gmail 授权页与回调接口公用一个接口 没有code时进入授权页 用户登录google 授权 之后google 带code 等信息 回调此接口 需要在console deve
  • 顺序表基本操作(完整)

    Seqlist h define CRT SECURE NO WARNINGS 1 pragma once include
  • pandas 怎么修改某一列的数据

    如果你想修改某一列的数据 你可以使用 df loc column name 来获取这一列的数据 然后你可以对这一列使用赋值操作 就可以修改这一列的数据了 例如 df loc column name new values 这里的 new va
  • 深入解析分段与分页

    分段 分页 引言 什么是碎片 段式模型的前身 基址加界限寄存器 动态重定位 分段式管理 分段思想 分段地址转换 段的另一个优点 很好的支持共享 虚拟地址翻译太慢 段的缺点 过多的外部碎片 分页式管理 分页思想 分页地址转换 分页的缺点 页表
  • 海康ipc onvif抓包分析

    型号 半球DS 2CD2122FWD IWS 子码流的地址 101 1 rtsp admin hik12345 10 7 36 222 554 Streaming Channels 102 transportmode unicast rts
  • 前端开发有哪些技术栈要掌握_为什么要掌握前端开发的这四个主要概念

    前端开发有哪些技术栈要掌握 After working as a front end developer for three years I have been able to summarize what I feel are the f
  • (个人)AR电子书系统创新实训第四周(2)

    使用Json保存数据索引 在成功地配置好服务器并进行了访问测试后 打包上传数据的功能只剩下最后一步需要测试了 那就是对数据关系的组织及保存 对于AR识别来说 数据的内容主要有两类 一类是用于进行位置判断的目标图像 在这个项目中就是宣传册上的
  • 毕业设计-基于深度学习的垃圾分类识别方法

    目录 前言 课题背景和意义 实现技术思路 一 目标检测算法对比研究 二 垃圾数据集的制作 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个
  • 基于java springboot vue实现的校园招聘系统

    基于java springboot vue实现的校园招聘系统 总体分为三端 分别为 管理员 用户 企业 用户端 管理员端 企业端
  • layui table切换html,layui-table对返回的数据进行转变显示的实例

    在使用layui表格时 在ajax请求回来的数据 有时候需要我们处理之后显示 1 比如性别sex这个字段 后台可能返回的是1 或者 2 那我们总不能显示1 和 2 我们需要显示男和女 这里就用到了自定义模板了 if d sex 1 男 el
  • RS485转0_20mA输出模块设计

    文章目录 1 简介 2 功能实现 3 测试 4 开源地址 1 简介 结合以前发的文章 我们知道 模拟量输出有两种 一种是共地型 一种是共源型 今天开源一款rs485隔离的转0 20ma输出模块的设计 我设计模块的原因是为了测试公司的一款模拟
  • 基础算法题——异或(复杂度的小差异)

    异或 题目描述 给定一个长度为 n 初始全为 0 的数列 ai 下标从 1 开始 定义操作模 k 异或 v 为对所有满足 ki 0 mod k 的下标 i 将异或上整数v 即令 ai ai v 给出q次操作 每次操作之后输出序列的异或和 并