CF2161G Editorial

Two language versions are available in order to serve both codeforces and luogu community.

English Version

Hints

  • What's the necessary condition for \(a_1^\prime\&a_2^\prime\cdots\&a_n^\prime=X\) to hold?

  • How can we ensure \(a_1^\prime\&a_2^\prime\cdots\&a_n^\prime\) is exactly equal to \(X\)?

  • Pay attention to some corner cases.

  • How can we optimize the procedure?

Solution

Step 1

We begin by considering a straightforward \(O(nq)\) approach.

A necessary condition for \(a_1^\prime\&a_2^\prime\cdots\&a_n^\prime=X\) to hold is that each modified value \(a_i^\prime\) must satisfy \(a_i^\prime\&X=X\).

So define \(up_X(a_i)\) is the minimum non-negative integer such that \((a_i+up_X(a_i))\&X=X\). Let \(b_i=a_i+up_X(a_i)\). To compute \(up_X(x)\),we locate the highest bit \(B\) (if any) where the binary representations of \(x\) and \(X\) differ.Then set it to \(1\) and keep the lower bits conform to \(X\).

After adjustment,let \(Y=b_1\&b_2\cdots\&b_n\). It satisfies that \(Y\&X=X\).

Next, we need to ensure that \(Y\) is exactly equal to \(X\). Similarly, locate the highest bit \(B\) (if any) and turn it to \(0\). If \(b_k\) is modified to turn \(B\) bit to \(0\). It can be shown that optimally, only one operation on a single element is sufficient to correct all lower differing bits as well.

When \(n\ge 2\), a potential issue arises: if we modify \(b_k\) on a bit where every element except \(b_k\) is \(1\) , \(Y\neq X\) again. To avoid this, it is generally optimal to operate on an element other than the one that would cause such a conflict.

Based on this, we can easily write a \(O(nq)\) code and submit.

Code for reference.

Step 2

After we get \(Y\), we try to speed up the procedure.

Let the bits of \(X\) be denoted as \(x_1,x_2\cdots x_k\) in descending order.

We process the bits from the highest to the lowest. At the \(i\)-th time,all \(a_i\) which contains \(x_1,x_2\cdots,x_{i-1}\) but not \(x_i\) are processed. It can be calculated by AND Fast Walsh-Hadamard Transform (FWT) and the Principle of Inclusion-Exclusion (PIE).

Code for reference.

Step 3

To make \(Y\) exactly \(X\), we identify the highest bit \(B\) where \(X\) and \(Y\) differ. We then look for an element \(a_k\) such that modifying it minimizes the number of operations required and it won't add new bits to \(Y\).

Let \(b\) be the highest bit changed in Step 2. We enumerate \([b+1,20]\). If at digit \(i\), \(0\) exists at least twice,find the number with
with the largest value in the lower \(i\) bits (i.e. \(a_k\&(2^i-1)\)) and compute it in \(O(1)\) time.

Note the special case where \(X=Y\).

Code for reference.

中文版本

Hint

• 要使 \(a_1^\prime\&a_2^\prime\cdots\&a_n^\prime=X\) 成立的必要条件是什么?

• 如何确保 \(a_1^\prime\&a_2^\prime\cdots\&a_n^\prime\) 恰好等于 \(X\)

• 注意一些边界情况。

• 如何加速操作过程?

Solution

Step 1

我们首先考虑一个直接的 \(O(nq)\) 方法。

要使 \(a_1^\prime\&a_2^\prime\cdots\&a_n^\prime=X\) 成立的一个必要条件是每个修改后的值 \(a_i^\prime\) 必须满足 \(a_i^\prime\&X=X\)
因此定义 \(up_X(a_i)\) 是满足 \((a_i+up_X(a_i))\&X=X\) 的最小非负整数。令 \(b_i=a_i+up_X(a_i)\)。为了计算 \(up_X(x)\),我们找到 \(x\)\(X\) 的二进制表示中不同的最高位 \(B\)(如果存在)。然后将其设置为 \(1\),并将低位调整为符合 \(X\)

调整后,令 \(Y=b_1\&b_2\cdots\&b_n\)。它满足 \(Y\&X=X\)

接下来,我们需要确保 \(Y\) 恰好等于 \(X\)。类似地,找到不同的最高位 \(B\)(如果存在)并将其变为 \(0\)。如果修改 \(b_k\)\(B\) 位变为 0。可以证明,最优情况下,只需对单个元素进行一次操作即可同时纠正所有较低的不同位。

\(n \ge 2\) 时,可能会出现一个问题:如果我们在某个位上修改 \(b_k\),而除了 \(b_k\) 之外的所有元素在该位上都是 1,那么 \(Y \neq X\) 会再次出现。为了避免这种情况,通常最优的操作是选择一个不会引起这种冲突的元素。

基于此,我们可以轻松编写 \(O(nq)\) 的代码并提交。

参考代码

Step 2

得到 \(Y\) 后,我们尝试加速该过程。

\(X\) 的位按降序表示为 \(x_1,x_2\cdots x_k\)

我们从高位到低位处理这些位。在第 \(i\) 次处理时,所有包含 \(x_1,x_2\cdots,x_{i-1}\) 但不包含 \(x_i\)\(a_i\) 将被处理。这可以通过卷积加容斥解决。

参考代码

Step 3

为了使 \(Y\) 恰好等于 \(X\),我们找到 \(X\)\(Y\) 不同的最高位 \(B\)。然后我们寻找一个元素 \(a_k\),使得修改它所需的操作次数最少,并且不会向 \(Y\) 添加新的位。

\(b\) 为第二步中改变的最高位。我们枚举 \([b+1,20]\)。如果在第 \(i\) 位,0 至少出现两次,则找到低 \(i\) 位中值最大的数(即 \(a_k\&(2^i-1)\))并在 \(O(1)\) 时间内计算。

注意 \(X=Y\) 的特殊情况。

参考代码

Reference

Pinely Round 5 editorial

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

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

相关文章

数组高阶方法:map、filter、reduce实战指南

数组高阶方法:map、filter、reduce实战指南 文章简介 在HarmonyOS应用开发中,数组操作是日常开发的重要组成部分。本文将深入探讨三个核心的数组高阶方法:map、filter和reduce,帮助开发者掌握这些强大的数据处理工…

设备能力检测:自适应不同硬件环境

设备能力检测:自适应不同硬件环境 引言 在 HarmonyOS 应用开发中,设备能力检测是构建自适应应用的关键技术。随着 HarmonyOS 生态的不断扩大,开发者需要确保应用能够在不同硬件配置的设备上提供一致的用户体验。本文…

DuckDB:轻量级 OLAP 数据库的新星

1. 分钟级上手一个像 SQLite 一样简单、却能跑得像 ClickHouse 一样快的分析引擎。而且——你今天就能用上。如果你经常在 Jupyter Notebook 里等 Pandas 加载数据,或者写一堆 Python 循环做聚合,那 DuckDB 很可能就…

跨设备剪贴板数据:实现应用间内容共享

跨设备剪贴板数据:实现应用间内容共享 概述 在 HarmonyOS 生态系统中,跨设备剪贴板功能让用户能够在一台设备上复制内容,然后在同一账号下的其他设备上粘贴使用。这项技术打破了设备边界,为开发者提供了全新的内容…

Text组件高级排版技巧:字体样式与文本布局深度优化

Text 组件高级排版技巧:字体样式与文本布局深度优化 文章简介 本文基于 HarmonyOS Next,深入探讨 Text 组件的高级排版技巧。我们将从基础字体样式设置开始,逐步深入到复杂的文本布局优化,帮助开发者掌握专业级的文…

通知与提醒系统:即时消息与日程管理实现

通知与提醒系统:即时消息与日程管理实现 概述 在HarmonyOS应用开发中,通知与提醒系统是连接用户与应用的重要桥梁。本文将深入探讨如何在HarmonyOS Next(API 10+)中实现高效的通知管理和智能的日程提醒功能。 官方…

try/catch/finally:完善的错误处理策略

try/catch/finally:完善的错误处理策略 概述 在 HarmonyOS 应用开发中,错误处理是保证应用稳定性和用户体验的关键环节。本文将深入探讨 HarmonyOS Next(API 10 及以上版本)中的错误处理机制,帮助开发者构建更加健…

4种XML解析方式详解

详细讲解四种主流的XML解析方式,包括其原理、特点、适用场景和代码示例。 四种方式,可以分为两大类:基于树的解析:将整个XML文档一次性加载到内存,形成一棵树形结构。DOM基于事件的解析:顺序读取XML文档,遇到节…

20232415 2025-2026-1 《网络与系统攻防技术》实验七实验报告

1.实验内容 2.实验目的 3.实验环境 4.实验过程与分析 4.1 使用SET工具建立冒名网站 4.1.1 建立冒名网站 4.1.2 验证欺骗效果 在浏览器中访问伪造的监听地址,发现能够看到一个与天翼快递登录页面相同的页面,说明冒名网…

2025 Launch X431 PRO3 ACE: Online ECU Coding 38+ Services for Euro/Amer Vehicles with CANFD/DoIP

Problem: Outdated Tools Can’t Keep Up with Modern Vehicle Technology Today’s European and American vehicles are more advanced than ever, packed with cutting-edge ECUs, complex protocols like CAN FD a…

QtSingleapplication单实例-源码分析

QtSingleapplication单实例-源码分析 目录QtSingleapplication单实例-源码分析官方案例 QtSingleApplication分析1. 描述2. 类解析QtLocalPeerQtSingleApplication3. 实际案例consoletrivial4. 逻辑流程(AI整理)QtSing…

2025解决VS C# NUGET 安装System.Data.SQLite+SourceGear.SQLite3 不支持 AnyCPU 的系列问题

环境:isual Studio 2022 项目:.NETFramework,Version=v4.8 时间:2025年11月30日 注:此问题在网络上搜到的解决办法比较旧,且部分失效,所以作此解决记录 使用Visual Studio NuGet方式安装System.Data.SQLite后会因为缺少…

102302156 李子贤 数据采集第四次作业

作业1 要求:熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。 使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。 候选网站:东…

东华萌新挑战赛 密室逃脱

点击查看代码 #include<bits/stdc++.h>using namespace std;bool check(int k,int n,const vector<vector<int> >& pos) {//枚举所有可以作为障碍区的起始位置 for(int r=0;r<=n-k;r++){for(…

第40天(中等题 数据结构)

打卡第四十天 2道简单题+1道中等题题目:思路:哈希表+位运算 代码: class Solution { public:int similarPairs(vector<string>& words) {unordered_map<int,int> cnt;int ans = 0;for(auto &s:…

核心功能详解

Vue3 大屏可视化平台核心功能详解 一、Composables 架构 Vue3 Composables 是该项目的核心架构模式,实现了逻辑复用和关注点分离。 1. usePersonnel - 人员管理 import { usePersonnel } from @/composables/usePerso…

2025-11-30-Nature Genetics | 本周最新文献速递

文章标题: Genetic associations with educational fields 中文标题: 基因与教育:解码教育领域选择背后的遗传驱动力! 关键词: 教育领域、全基因组关联研究、遗传相关性、社会分层、多基因风险评分 摘要总结: 教…

效果-Element 3D

--本篇导航--安装及配置基本操作 导入(给AI文件导入E3D、图片挤出、加载贴图、导入外部模型) 多个图层添加到一个组里安装及配置 可以直接安装Element 3D,也可以安装Videocopilot Optical Flares套件。 安装配置 如…

2025苏州餐饮公司测评:苏州会议餐配送选这些,全区域超省心

2025苏州餐饮公司测评:苏州会议餐配送选这些,全区域超省心!在苏州筹备会议餐配送时,选择合适的服务商是保障会议顺利开展的关键环节。结合行业实践与用户需求,可从以下四个核心维度综合考量,确保选到省心、可靠的合…