NOIP2023模拟7联测28 异或

这篇具有很好参考价值的文章主要介绍了NOIP2023模拟7联测28 异或。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目大意

给定一个长度为 n n n的由非负整数组成的序列 a a a,你们需要进行一系列操作,每次操作选择一个区间 [ l , r ] [l,r] [l,r],对于所有 l ≤ i ≤ r l\leq i\leq r lir,将 a i a_i ai异或上 w w w。你需要将所有 a i a_i ai都变为 0 0 0,求最小的操作次数。

1 ≤ n ≤ 17 , 0 ≤ a i ≤ 1 0 18 1\leq n\leq 17,0\leq a_i\leq 10^{18} 1n17,0ai1018


题解

首先我们设序列 d d d为序列 a a a的差分序列(即 d i = a i ⊕ a i − 1 d_i=a_i\oplus a_{i-1} di=aiai1),于是我们就可以将区间修改变成单点修改(后缀区间修改)或双点修改(非后缀区间修改)。

求出差分序列后,我们在差分序列上操作,题意变为要将所有 d i d_i di变为 0 0 0

我们先不考虑 w w w的取值,而考虑如何取区间 [ l , r ] [l,r] [l,r]。将 n n n个数看成 n n n个点,将修改操作看成连接两个修改点的无向边(或自环)。那么,一组合法的方案由若干个连通块组成。

考虑每个连通块的最小边数,设这个连通块的大小为 x x x,则最小边数的下界为 x − 1 x-1 x1(即一棵树),上界为 x x x(将其中一个点连向其他所有点,再在这个点上连一个自环即合法)。我们考虑如何取到下界。

我们发现,可以取到这个下界当且仅当连通块内的数异或和为 0 0 0

必要性: 每次操作都是双点修改,那么整个连通块内的数的异或和不变,如果最终的异或和为 0 0 0,则开始时异或和必须为 0 0 0

充分性: 考虑用一条链串起这个连通块中的所有数,每次将链头通过异或自己的方式删掉,下一个数受到影响后成为新的链头。那么,经历 x − 1 x-1 x1次操作后,最后一个数肯定为 0 0 0,不需要再对其操作了。

也就是说,我们要将差分序列 d d d分成若干个子序列,对于每个子序列:

  • 当其异或和为 0 0 0时,其权值为 x − 1 x-1 x1
  • 否则,其权值为 x x x

我们要求一种划分方式,使得权值和最小。

可以发现,答案就是 n n n减去划分出的子序列中异或和为 0 0 0的子序列的数量,那我们要使划分出的子序列中异或和为 0 0 0的子序列的数量最大,可以用状压 D P DP DP,设 f s f_s fs表示 d d d的子序列 s s s可以划分成多少个异或和为 0 0 0的子序列,那么枚举子集的子集来转移即可。

可以先预处理出每个子序列的异或和。

时间复杂度为 O ( 3 n ) O(3^n) O(3n)文章来源地址https://www.toymoban.com/news/detail-735194.html

code

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

到了这里,关于NOIP2023模拟7联测28 异或的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 线段树好题! P2824 [HEOI2016/TJOI2016]排序 题解

    题目传送门 线段树好题!!!! 咕咕了挺久的一道题目,很早之前就想写了,今天终于找了个时间A掉了。 给定一个 (1) 到 (n) 的排列,有 (m) 次操作,分两种类型。 1. 0 l r 表示将下标在 ([l, r]) 区间中的数升序排序。 2. 1 l r 表示将下标在 ([l, r]) 区间中的数降序排序。

    2023年04月09日
    浏览(36)
  • CSP模拟58联测20 回忆旅途的过往

    题目大意 有 n n n 个砝码,每个砝码的初始重量为 a i a_i a i ​ 。有 q q q 次操作,每次操作分为以下两种类型: 1 l r x :表示将 l l l 到 r r r 之间的所有 a i a_i a i ​ 都变成 x x x 2 l r x :查询 l l l 到 r r r 之间的所有砝码,每个砝码可以用无限次,求是否能称出质量 x x x a i a_

    2024年02月07日
    浏览(46)
  • 【华为OD机试 2023最新 】模拟商场优惠打折(C语言题解 100%)

    题目描述 模拟商场优惠打折,有三种优惠券可以用,满减券、打折券和无门槛券。 满减券:满100减10,满200减20,满300减30,满400减40,以此类推不限制使用; 打折券:固定折扣92折,且打折之后向下取整,每次购物只能用1次; 无门槛券:一张券减5元,没有使用限制。 每个

    2024年02月03日
    浏览(47)
  • 2023第十四届蓝桥杯模拟赛第二期个人题解(Java实现)

    2023第十四届蓝桥杯校内模拟赛第三期个人题解(Java实现) 蓝桥杯真题——单词分析(Java实现) 这篇文章为个人题解,假如我写的解法有误,欢迎大家在评论区指正👏👏!!!希望这篇文章对你有帮助❤❤ 请找到一个大于 2022 的最小数,这个数转换成二进制之后,最低的

    2023年04月23日
    浏览(170)
  • 模拟赛好题分享

    @ 目录 山茶花 100pts T1区间逆序对 60pts 100pts 区间操作固定套路,转化为前缀操作 dream 20pts 神奇分块 杭州:转化题意,正难则反 正难则反(或者对于这种有删边操作的题), 我们看成反向加边 看题:构造 坐飞机:斜率优化DP 抓颓 : 启发式合并 + stl大杂烩 讨厌的线段树 Foo Fighters

    2024年02月05日
    浏览(58)
  • Bessie Come Home回家 NOIP题解

    Bessie Come Home 回家 (comehome.pas) 【问题描述】 现在是晚餐时间,而母牛们在外面分散的牧场中。农民约翰按响了电铃,所以她们开始向谷仓走去。你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只最快的母牛)。在挤奶的时候(晚餐前),每只母牛都在

    2024年02月11日
    浏览(54)
  • P1077 [NOIP2012 普及组] 摆花 题解

    小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 m m m 盆。通过调查顾客的喜好,小明列出了顾客最喜欢的 n n n 种花,从 1 1 1 到 n n n 标号。为了在门口展出更多种花,规定第 i i i 种花不能超过 a i a_i a i ​ 盆,摆花时同一种花放在一起,且不同种类的花

    2024年02月08日
    浏览(48)
  • P1967 [NOIP2013 提高组] 货车运输 题解

    原题地址 由于题目要求的是使两点之间的最小边权最大,所以可以构造最大生成树(最大生成树一定是最大瓶颈生成树,而瓶颈生成树上两点之间的路径,在原图中的所有路径中,最小边权仍然最大,即满足题目要求,详见 https://oi-wiki.org/graph/mst/#瓶颈生成树 ),答案为最大

    2024年04月08日
    浏览(40)
  • 【洛谷 P1097】[NOIP2007 提高组] 统计数字 题解(映射)

    注意 :数据可能存在加强。 某次科研调查时得到了 n n n 个自然数,每个数均不超过 1.5 × 1 0 9 1.5 times 10^9 1.5 × 1 0 9 。已知不相同的数不超过 1 0 4 10^4 1 0 4 个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。 共 n + 1 n+1 n + 1 行。 第一

    2024年02月09日
    浏览(48)
  • P1024 [NOIP2001 提高组] 一元三次方程求解题解

    题目 有形如: 这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d均为实数),并约定该方程存在三个不同实根(根的范围在−100至100之间),且根与根之差的绝对值≥1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位。 提

    2024年02月20日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包