洛谷——P8468 [Aya Round 1 C] 文文的构造游戏(01构造问题)
P8468 [Aya Round 1 C] 文文的构造游戏
题目描述
[Aya Round 1 C] 文文的构造游戏 - 洛谷
运行代码(暴力枚举)——超时
#include <stdio.h>
#define ll long long
const int N = 1e6 + 5;
// 计算数组元素的异或和
ll xorSum(ll arr[], int n) {ll res = 0;for (int i = 0; i < n; i++) {res ^= arr[i];}return res;
}// 计算数组元素的和
ll sumArray( ll arr[], int n) {ll res = 0;for (int i = 0; i < n; i++) {res += arr[i];}return res;
}int main() {int T;scanf_s("%d", &T);while (T--) {ll s, m;scanf_s("%lld%lld", &s, &m);int f = 0;// 从长度为1开始尝试构造数组for (int n = 1; n <= m; n++) {// 只需要确定前n - 1个元素,最后一个元素通过总和计算得出ll arr[N];for (int i = 0; i < n - 1; i++) {arr[i] = 1;}arr[n - 1] = s - sumArray(arr, n - 1);// 检查是否满足条件if (arr[n - 1] >= 1 && arr[n - 1] <= s && xorSum(arr, n) == 0 && sumArray(arr, n) == s) {printf("%d ", n);for (int i = 0; i < n; i++) {printf("%lld ", arr[i]);}printf("\n");f = 1;break;}}if (!f) {printf("-1\n");}}return 0;
}
代码思路
- 首先读取数据组数
T
。然后对于每组数据,读取s
和m
的值。通过两层循环来尝试构造满足条件的数组。外层循环遍历可能的数组长度n
(从1
到m
),内层循环尝试确定数组的每个元素的值(从1
到s
)。 - 当找到满足条件(异或和为
0
且元素总和为s
)的数组时,输出数组长度和数组元素,并标记f
为1
,然后跳出内层循环。如果遍历完所有可能情况都没有找到满足条件的数组,则输出-1
。 xorSum
函数:用于计算给定数组arr
中所有元素的异或和,通过遍历数组并依次对元素进行异或运算得到结果。sumArray
函数:用于计算给定数组arr
中所有元素的总和,通过遍历数组并依次将元素相加得到结果。
运行代码(01构造)——ac
C代码
#include <stdio.h>
#define ll long long
const int N = 1e6 + 5;
// 计算数组的异或和
ll xorSum(ll arr[], int n) {ll res = 0;for (int i = 0; i < n; i++) {res ^= arr[i];}return res;
}// 计算数组的和
ll sumArray(ll arr[], int n) {ll res = 0;for (int i = 0; i < n; i++) {res += arr[i];}return res;
}
int main() {int T;scanf("%d", &T);while (T--) {ll s, m;scanf("%lld%lld", &s, &m);// 如果s为奇数且m为1,无解if (s % 2 == 1 && m == 1) {printf("-1\n");continue;}// 如果s为0,构造长度为1,元素为0的数组if (s == 0) {printf("1 0\n");continue;}int n = 2;long long arr[2];// 尝试用两个数构造满足条件的数组if (m >= 2) {arr[0] = s / 2;arr[1] = s / 2;if (xorSum(arr, 2) == 0 && sumArray(arr, 2) == s) {printf("2 %lld %lld\n", arr[0], arr[1]);continue;}}// 如果前面的情况都不满足,尝试用多个数构造// 先将s表示成二进制形式ll binary_s[64];int binary_len = 0;ll temp_s = s;while (temp_s > 0) {binary_s[binary_len++] = temp_s % 2;temp_s /= 2;}// 从二进制的最低位开始模拟构造数组n = binary_len;ll c_arr[N];for (int i = 0; i < binary_len; i++) {if (binary_s[i] == 1) {c_arr[i] = 1LL << i;}else {c_arr[i] = 0;}}// 检查构造的数组是否满足条件if (xorSum(c_arr, n) == 0 && sumArray(c_arr, n) == s) {printf("%d ", n);for (int i = 0; i < n; i++) {printf("%lld ", c_arr[i]);}printf("\n");}else {printf("-1\n");}}return 0;
}
C++ 向量
#include <iostream>
#include <vector>
#define ll long long
using namespace std;// 计算向量元素的异或和
ll xorSum(const vector<ll>& arr) {ll res = 0;for (ll num : arr) {res ^= num;}return res;
}// 计算向量元素的和
ll sumArray(const vector<ll>& arr) {ll res = 0;for (ll num : arr) {res += num;}return res;
}int main() {int T;cin >> T;while (T--) {ll s, m;cin >> s >> m;// 如果s为奇数且m为1,无解if (s % 2 == 1 && m == 1) {cout << "-1" << endl;continue;}// 如果s为0,构造长度为1,元素为0的向量if (s == 0) {cout << "1 0" << endl;continue;}int n = 2;vector<ll> arr(2);// 尝试用两个数构造满足条件的向量if (m >= 2) {arr[0] = s / 2;arr[1] = s / 2;if (xorSum(arr) == 0 && sumArray(arr) == s) {cout << "2 " << arr[0] << " " << arr[1] << endl;continue;}}// 如果前面的情况都不满足,尝试用多个数构造// 先将s表示成二进制形式vector<ll> binary_s;ll temp_s = s;while (temp_s > 0) {binary_s.push_back(temp_s % 2);temp_s /= 2;}// 从二进制的最低位开始模拟构造向量n = binary_s.size();vector<ll> c_arr(n);for (size_t i = 0; i < n; i++) {if (binary_s[i] = = 1) {c_arr[i] = 1LL << i;}else {c_arr[i] = 0;}}// 检查构造的向量是否满足条件if (xorSum(c_arr) == 0 && sumArray(c_arr) == s) {cout << n << " ";for (ll num : c_arr) {cout << num << " ";}cout << endl;}else {cout << "-1" << endl;}}return 0;
}
代码思路
-
首先在
main
函数中读取数据组数T
,然后对于每组数据读取s
和m
的值。 -
接着进行一些特殊情况的判断:
- 如果
s
为奇数且m
为1
,那么显然无法构造出满足条件的数组,直接输出-1
。 - 如果
s
为0
,则构造一个长度为1
,元素为0
的数组并输出。
- 如果
-
然后尝试用两个数来构造满足条件的数组:当
m >= 2
时,将s
平均分成两份作为两个数组元素,检查其异或和与总和是否满足条件,如果满足则输出该数组。 -
如果前面的情况都不满足,就采用 01 构造模拟思想:
- 先将
s
转化为二进制形式存储在binary_s
数组中,并记录二进制的长度binary_len
。 - 然后从二进制的最低位开始模拟构造数组
c_arr
:如果二进制位为1
,则对应的数组元素为2
的相应幂次方;如果二进制位为0
,则数组元素为0
。 - 最后检查构造的数组是否满足异或和为
0
以及总和为s
的条件,如果满足则输出该数组,否则输出-1
。 -
通过使用向量,代码在处理动态大小的数据结构时更加方便灵活,避免了像 C 语言中那样需要手动管理数组大小和内存分配等问题。
- 先将
相关文章:

洛谷——P8468 [Aya Round 1 C] 文文的构造游戏(01构造问题)
P8468 [Aya Round 1 C] 文文的构造游戏 题目描述 [Aya Round 1 C] 文文的构造游戏 - 洛谷 运行代码(暴力枚举)——超时 #include <stdio.h> #define ll long long const int N 1e6 5; // 计算数组元素的异或和 ll xorSum(ll arr[], int n) {l…...
双击热备和负载均衡的区别
区别: 双机热备 (heartbeat):对同一应用来讲,永远是主机应用启动,备机应用停止的一主一备模式(两台通常叫双击热备,多台称为高可用) 负载均衡:两台/多台服务器 上同一个应用系统同时工作,分担负…...

如何使用 cPanel 部署 WordPress临时网站
对于依赖WordPress站点或WooCommerce商店的企业来说,在生产环境中直接修改站点风险很大。而WordPress的临时网站是一个更安全的选择,可以通过使用临时网站进行编辑来规避风险。 在本文中,我们将详细介绍WordPress临时网站的相关知识、使用临时…...

Android 自定义 Dialog 实现列表 单选,多选,搜索
前言 在Android开发中,通过对话框让用户选择,筛选信息是很方便也很常见的操作。本文详细介绍了如何使用自定义 Dialog、RecyclerView 以及自定义搜索框 来实现选中状态和用户交互,文中大本分代码都有明确注释,主打一个简单明了&a…...

下载地址合辑(持续更新)
下载地址合辑 汇总OSG相关地址Visual Studio Qt 地址qt插件安装失败 Boost库boost库编译步骤 FFmpeg 地址osg编译库 常用的下载地址: 汇总 vlc 地址: https://www.videolan.org/vlc/index.zh_CN.html visual 地址:https://my.visualstudio.…...
Android Kotlin 高阶函数详解及其在协程中的应用
文章目录 1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda 表达式3.3 匿名函数3.4 返回函数 4. 高阶函数的深入用法4.1 函数组合4.2 内联函数4.3 高阶扩展函数 5. Kotlin 高阶函数的对比优势5.1 与 Java 的对比5.2 与 JavaScript 的…...

CSS基础—网页布局(重点!)
1、两列布局 (1)概念 经典两列布局是指一种网页布局方式,其中一列宽度固定,另一列宽度自适应。 这种布局方式在网页设计中非常常见,因为它能够提供良好的视觉效果和用户体验。 如图所示: 页面顶部放置一…...

【Fargo】17:vs工程转qt构建:QT6 不支持32bit转向qt5.15.2
vs2022的console 工程加入qt支持后使用qt15.2 的vs2019 库,变为一个qt界面程序。最终效果 一些参考 qt5的项目搭建 qt5 最多支持到vs2019 qt6 最新 已经支持vs2022 国内还是以qt5.15为主 升级qt的vstools...
智能电表蓝牙芯片方案
RAMSUN基于自研射频技术和基带算法提供蓝牙MCU。蓝牙MCU配套成熟的网络协议栈和丰富的示例代码及多平台APP工具。部分芯片型号无需二次开发,即连即用;提供特色蓝牙/串口/USB三通芯片,为更多复杂无线应用赋能。 应用案例说明: BLE方便用户直接…...

miRNA分析流程学习(一)/TCGAmiRNA数据下载
miRNA(microRNA) 是一种小的非编码 RNA 分子,通常由 20 到 24 个核苷酸组成。miRNA 主要存在于动植物中,并在基因表达调控中起到关键作用。它们通过与特定的信使 RNA(mRNA)分子结合来抑制基因表达ÿ…...

西南大学软件专硕考研难度分析!
C哥专业提供——计软考研院校选择分析专业课备考指南规划 西南大学软件工程学硕近三年呈现出招生规模稳定、复试线稳中有升的特点。2024届实际录取8人,复试分数线305分,复试录取率67%,相比去年复试线略有下降但仍高于2022届,显示出…...

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-21
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-21 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-21目录1. The Fair Language Model Paradox摘要研究背景问题与挑战如何解决创新点算法模型实验效果重要数据与结论推荐阅读指数&…...

安全芯片 OPTIGA TRUST M 使用介绍与示例(基于STM32裸机)
文章目录 目的资料索引硬件电路软件框架介绍数据存储框架移植框架使用 使用示例示例地址与硬件连接通讯测试功能测试 总结 目的 OPTIGA TRUST M 是英飞凌推出的安全芯片,芯片通提供了很多 slot ,用于存放各类安全证书、密钥、用户数据等,内置…...

【AI换装整合及教程】CatVTON:时尚与科技的完美融合
在当今数字化时代,时尚行业正经历着一场前所未有的变革,而 CatVTON 作为一款由中山大学、Pixocial 等机构联合研发的轻量化 AI 虚拟换装工具,无疑是这场变革中的璀璨明星。 一、独特的技术架构 CatVTON 基于 Stable Diffusion v1.5 inpainit…...

接口测试(七)jmeter——参数化(RandomString函数)
一、RandomString函数 需求:模拟10个用户注册 1. 【工具】–>【函数助手对话框】 2. 选择RandomString函数 假设手机号码前3位设置为固定数值136,后8位可用RandomString函数随机产生数值 ① Random string length:8(随机长度…...

simple_php
访问靶场 这里传入a和b参数,绕过三个if即可拿到flag a a a_GET[ a’ ];中是抑制报错信息的。 第一个if非常的抽象, if($a0 and $a){echo $flag1; }处理a 要输出flag1,a0,但是,在php中0被视为假也就是Flase 如果a0࿰…...

网络搜索引擎Shodan(4)
声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章 声明:本文主要用作技术分享,所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险,并遵循相关法律法规。 感谢泷…...

【Flask】一、安装与第一个测试程序
目录 Flask简介 安装Flask 安装pip(Python包管理器) 使用pip安装Flask 验证安装 创建Flask程序 创建应用 运行 访问测试 Flask简介 Flask是一个用Python编写的轻量级Web应用框架。它被设计为易于使用和扩展,使其成为构建简单网站或复…...
R语言笔记(二):向量
文章目录 一、Data structure: vectors二、Indexing vectors三、Re-assign values to vector elements四、Generic function for vectors五、Vector of random samples from a distribution六、Vector arithmetic七、Recycling八、Element-wise comparisons of vectors九、Comp…...

信息安全工程师(71)隐私保护技术与应用
前言 隐私保护技术是指通过一系列的技术手段来保护人们的隐私不被公开泄露。随着数字化和网络化社会的发展,个人隐私的保护变得尤为重要,隐私保护技术也因此得到了广泛的应用和发展。 一、隐私保护技术概述 隐私保护技术主要包括数据加密技术、身份认证技…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...