NOIP2023模拟7联测28 B. 异或

NOIP2023模拟7联测28 B. 异或

题目大意

给定一长度为 n n n 的由非负整数组成的数组 a a a ,你需要进行一系列操作,每次操作选择一个区间 [ l , r ] [l , r] [l,r],将 a i , i ∈ [ l , r ] a_i ,i\in[l , r] ai,i[l,r] 异或上 w w w 。你需要将 a a a 全部变为 0 0 0

求最小操作次数。

思路

先搞个差分, d i = a i ⊕ a i − 1 d_i = a_i \oplus a_{i - 1} di=aiai1

我们可以发现把前 i i i d d d 异或起来就等于 a i a_i ai

那么我们就可以把区间异或操作变成一种类似于差分的双点修改操作:如果想把区间 [ l , r ] [l , r] [l,r] 异或 w w w 那么就等价于 d l ⊕ w , d r + 1 ⊕ w d_l \oplus w , d_{r + 1} \oplus w dlw,dr+1w

我们可以把 n n n 个数抽象为 n n n 个点,将修改操作抽象为两个点之间连无向边,这样的一组操作方案就是可以把整个序列分成若干个连通块的图。

那么每个连通块的操作次数就是边数。

一个大小为 x x x 的连通块的的边数为 x x x x − 1 x - 1 x1 ,只有当序列中所有 d d d 的异或和为 0 0 0 时边数才为 x − 1 x - 1 x1 ,否则都是 x x x

所以一个子序列 s s s 的答案就是把 s s s 的大小减去 s s s 划成最多的异或和为 0 0 0 的数量。

f s f_s fs 为能够把 s s s 划分成最多的异或和为 0 0 0 的数量
f s = max ⁡ f t + f s ⊕ t , ( s & t = 0 ) f_s = \max f_t + f_{s \oplus t} , (s \& t = 0) fs=maxft+fst,(s&t=0)

code

#include <bits/stdc++.h>
#define fu(x , y , z) for(int x = y ; x <= z ; x ++)
#define LL long long
using namespace std;
int n , f[1 << 18] , g[1 << 18];  
LL a[25] , d[25] , sum;
int main () {freopen ("xor.in" , "r" , stdin);freopen ("xor.out" , "w" , stdout);scanf ("%d" , &n);fu (i , 1 , n) scanf ("%lld" , &a[i]);fu (i , 1 , n) d[i] = a[i] ^ a[i - 1];fu (i , 1 , (1 << n) - 1) {sum = 0;fu (j , 1 , n) {if (i & (1 << j - 1)) {sum ^= d[j];}}if (!sum) f[i] = 1;}fu (s , 1 , (1 << n) - 1) {g[s] = f[s];for (int t = (s - 1) & s ; t ; t = (t - 1) & s) {if (f[t])g[s] = max (g[s] , g[s ^ t] + 1);}}printf ("%d" , n - g[(1 << n) - 1]);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/125533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么理解电流超前电压、电压超前电流?

电容和电感&#xff0c;电压超前电流&#xff0c;电流超前电压都是我们经常听到的。作为非专业人士&#xff0c;这些听起来确实有点摸不着头脑&#xff0c;今天特别查了下电容、电感、电压电流相关资料&#xff0c;总算是弄明白了&#xff0c;在此特地记录下&#xff01; 1. 电…

【LeetCode:150. 逆波兰表达式求值 | 栈】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

一篇文章入门KNN算法

文章目录 KNNKNN算法KNN in practice推荐系统我们想回答什么问题&#xff1f;探索、清理和准备数据使用算法 Summary 参考文献 KNN 监督学习是一种依赖输入数据来学习函数的算法&#xff0c;该函数在给定新的未标记数据时可以产生适当的输出。 监督学习用于解决分类或回归问题…

LLM - 训练与推理过程中的 GPU 算力评估

目录 一.引言 二.FLOPs 和 TFLOPs ◆ FLOPs [Floating point Opearation Per Second] ◆ TFLOPs [Tera Floating point Opearation Per Second] 三.训练阶段的 GPU 消耗 ◆ 影响训练的因素 ◆ GPT-3 训练统计 ◆ 自定义训练 GPU 评估 四.推理阶段的 GPU 消耗 ◆ 影响…

bitsandbytes 遇到CUDA Setup failed despite GPU being available.

使用conda 管理环境时加载大模型会遇到bitsandbytes无法识别cuda的情况&#xff1a; 此处windows系统&#xff1a; pip install bitsandbytes-windowslinux 系统&#xff1a; 将bitsandbytes版本降低至0.39.0 pip install bitsandbytes0.39.0

Pap.er for Mac:高清壁纸应用打造你的专属视觉盛宴

在浩瀚的互联网海洋中&#xff0c;你是否曾为寻找一张心仪的高清壁纸而烦恼&#xff1f;或者是在大量的壁纸应用中感到困扰&#xff0c;不知道哪一个能满足你的需求&#xff1f;今天&#xff0c;我要向你介绍的&#xff0c;是一款独特的5K高清壁纸应用——Pap.er for Mac。 Pa…

leetcode:374. 猜数字大小(二分查找)

一、题目 函数原型&#xff1a;int guessNumber(int n) 二、思路 本题其实就是从 1 - n 中找出所要的答案。利用guess函数来判断数字是否符合答案。 答案小于当前数字&#xff0c;guess函数返回-1 答案等于当前数字&#xff0c;guess函数返回0 答案大于当前数字&#xff0c;gue…

golang工程— grpc-gateway健康检查和跨域配置

grpc健康检查网关跨域配置 grpc健康检查 grpc健康检查使用 服务端配置 import ("google.golang.org/grpc/health""google.golang.org/grpc/health/grpc_health_v1" )//添加健康检查服务,多路复用 grpc_health_v1.RegisterHealthServer(s, health.NewSe…

Java Web 项目通用基础响应结果类 BaseRespResult

文章归档&#xff1a;https://www.yuque.com/u27599042/coding_star/cl36rbz6b51t5x44 BaseRespResult&#xff1a;用于封装响应客户端数据的基本结果类 依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-…

织梦dedecms后台档案列表显示空白或显示不了文章的解决方法

织梦dedecms后台档案列表显示空白或显示不了文章的解决方法 dede/content_list.php空白解决方法如下 dede/content_list.php空白 在DEDE后台可以查看栏目文章&#xff0c;但是所有档案列表却为空白或者显示不了文章,如图所示&#xff1a; 后来找到dede/content_list.php,看了下…

Android NDK开发详解之ndk-build 脚本

Android NDK开发详解之ndk-build 脚本 内部原理从命令行调用选项可调试 build 与发布 build要求 ndk-build 脚本使用 NDK 的基于 Make 的构建系统构建项目。我们针对 ndk-build 使用的 Android.mk 和 Application.mk 配置提供了更具体的文档。 内部原理 运行 ndk-build 脚本相…

使用pytorch解析mnist数据集

当解析MNIST数据集时&#xff0c;以下是代码的详细介绍&#xff1a; 1. **导入必要的库**&#xff1a; import torch import torchvision from torchvision import transforms from torchvision.datasets import MNIST import matplotlib.pyplot as plt 这些库是用于处理数…

持续集成部署-k8s-服务发现-Ingress 路径匹配与虚拟主机匹配

持续集成部署-k8s-服务发现-Ingress 路径匹配与虚拟主机匹配 1. 安装 Ingress-Nginx2. 创建要代理的 Service3. 创建一个新的 Ingress-Nginx1. 安装 Ingress-Nginx 要使用 Ingress-Nginx 首先第一步是需要先安装它,安装的步骤可以参考:持续集成部署-k8s-服务发现-Ingress 2…

C++基础复习

C—Cherno 一、C中的引用 #include<iostream> #include"Log.h"void Increment(int& value) {value; }int main() {int a 5;int b 10;//引用不能只声明不赋值//&就和数据类型差不多&#xff0c;要和int写在一起&#xff0c;int&int& ref a…

JVM 分代垃圾回收过程

堆空间划分了代&#xff1a; 年轻代&#xff08;Young Generation&#xff09;分为 eden 和 Survivor 两个区&#xff0c;Survivor 又分为2个均等的区&#xff0c;S0 和 S1。 首先&#xff0c;新对象都分配到年轻代的 eden 空间&#xff0c;Survivor 刚开始是空的。 当 eden …

4. 一文快速学懂常用工具——GDB(上)

本章讲解知识点 什么是GDB?GDB 的安装在Windows平台上使用GDB攻略为什么 Git 可以?本专栏适合于软件开发刚入职的学生或人士,有一定的编程基础,帮助大家快速掌握工作中必会的工具和指令。本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅。如专栏内容有错漏,欢迎在…

添加多个单元对象

开发环境&#xff1a; Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example参考代码 demo解决问题&#xff1a;不同阶段添加多个单元对象。 定义一个点集和一个单元集合&#xff0c;单元的类型可以是点、三角形、矩形、多边形等基本图形。只…

2023NOIP A层联测21-异或

给定一长度为 N N N 的由非负整数组成的数组 a a a&#xff0c;你需要进行一系列操作&#xff0c;每次操作选择一个区间 [ l , r ] [l,r] [l,r]&#xff0c;将 a [ l , r ] a_{[l,r]} a[l,r]​ 异或上 w w w。你需要将 a i a_i ai​ 全部变为 0 0 0。 求最小操作次数。…

MaxPatrol SIEM 8.0:用于行为分析的 ML,降低了硬件要求,每秒可处理超过 50 万个信息安全事件

Positive Technologies 发布了 MaxPatrol SIEM 信息安全事件监控和事件检测系统的第八个版本。更新后的产品将使该公司在需要超大型安装的公司和需要使用人工智能技术的政府机构中的市场份额增加近三分之一。 主要变化包括降低了硬件要求&#xff0c;提高了系统性能&#xff0…