分苹果_100分_A/B卷复用_位运算/异或运算

2023-11-01

分苹果

题目描述:

  A、B两个人把苹果分为两堆,
  A希望按照他的计算规则等分苹果,他的计算规则是按照二进制加法计算,并且不计算进位 12+5=9(1100 + 0101 = 9),
  B的计算规则是十进制加法,包括正常进位,B希望在满足A的情况下获取苹果重量最多。

输入苹果的数量和每个苹果重量,输出满足A的情况下B获取的苹果总重量。
如果无法满足A的要求,输出-1。

数据范围:
  1 <= 总苹果数量 <= 20000
  1 <= 每个苹果重量 <= 10000

输入输出描述:

输入描述:

  输入第一行是苹果数量:3
  输入第二行是每个苹果重量:3 5 6

输出描述:

  输出第一行是B获取的苹果总重量:11

示例1:

输入:
	3
	3 5 6
输出:
	11

示例2:

输入:
	8
	7258 6579 2602 6716 3050 3564 5396 1773
输出:
	35165

解题思路:

1:明确不进位的二进制加法,即异或操作
2:A按照二进制加法计算,且要求等分:是否能等分,取决于所有苹果的重量做异或运算后结果是否为0
异或运算

  比如:12 + 5 = 9≠0(1100 + 0101 = 9),故当苹果为:12、5时,不能按照A的要求等分。
  比如:12 + 5 + 9 = 0(1100 + 0101 + 1001 = 0),故当苹果为:12、5、9时,可以能按照A的要求等分。此时可以分为:A-5,B-21

故解题思路为:计算出所有苹果的异或结果,同时记录下最轻的苹果重量min:
  ①:如果异或结果为0,说明可以按照A的规则分,A分到最轻的苹果,剩余苹果都归B。(异或运算的结合律:(a ^ b) ^ c = a ^ (b ^ c))
  ②:如果异或结果不为0,说明不可以按照A的规则均分,输出-1。

异或操作:

  异或运算,也称为“异或操作”或“异或运算符”,是一种逻辑运算,用于比较两个值的位(二进制位)是否不同。异或运算的结果为1表示对应的位不同,结果为0表示对应的位相同
异或运算的符号通常用“^”表示,例如:
  0 ^ 0 = 0
  0 ^ 1 = 1
  1 ^ 0 = 1
  1 ^ 1 = 0
异或运算还具有一些重要的性质:
  交换律:a ^ b = b ^ a
  结合律:(a ^ b) ^ c = a ^ (b ^ c)
  自反性:a ^ a = 0
  零值性:a ^ 0 = a
  幂等性:a ^ b ^ b = a
  逆运算:对于任意固定的数 b,a ^ b ^ b = a
在计算机编程中,异或运算的应用非常广泛,例如:
  交换两个变量的值,无需使用临时变量:a = a ^ b; b = a ^ b; a = a ^ b;
  判断奇偶性:一个数与1进行异或操作,结果为1表示奇数,结果为0表示偶数。
  用于加密和校验算法,如校验和、CRC(循环冗余校验)等。
  异或运算只关注对应位的值是否不同,而不关心具体的数值。

代码:

public static void main(String[] args) {
	Scanner scanner = new Scanner(System.in);
	int n = Integer.parseInt(scanner.nextLine());
	int[] weights = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();

	int aw = 0;
	int bw = 0;
	int min = Integer.MAX_VALUE;
	for (int i = 0; i < n; i++) {
		// 不进位的二进制加法,即:做异或操作
		aw ^= weights[i];
		bw += weights[i];
		min = Math.min(weights[i], min);
	}

	if (aw == 0) {
		System.out.println(bw - min);
	} else {
		System.out.println(-1);
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分苹果_100分_A/B卷复用_位运算/异或运算 的相关文章

随机推荐

  • gitlab代码上传方式1

    本地代码上传到gitlab上操作流程 自我总结 1 在gitlb上新建项目 点击New project 首次将代码上传到gitlab上时 先配置Settings中的SSH Keys 2 配置SSH Keys 那么SSH Keys是怎么获得的
  • 推荐几款可以直接在手机上编程的app(包含Java、C、Python等)

    这里介绍几款可以在手机上编程的app 分别是 1 java和Android AIDE集成开发环境 2 C语言 c语言编译器 C4droid 3 python QPython3 Termux 4 CSS HTML JavaScript HTM
  • python 预测任意天后股票数据_机器学习交易——如何使用回归预测股票价格?【翻译】...

    前几天 我读了一篇关于人工智能到目前为止是如何发展的以及它将走向何方的文章 我被吓了一跳 我也很难理解作者所描绘的未来的可能性 这是人工智能在医学领域应用的可能性之一 外科医生可以用她的运动皮层控制一个机器手术刀 而不是用她的手 她可以从手
  • 团队管理那点破事,OKR绩效、核心人才、面试、技术分享、研发流程

    微信搜索 微观技术 关注这个不喜欢内卷的程序员 精彩文章汇总 GitHub https github com aalansehaiyang technology talk Star 12K 汇总java生态圈常用技术框架 开源中间件 系统架
  • Redisson分布式锁

    目录 一 分布式锁 1 分布式锁的设计原则 2 分布式锁的实现方案 二 Redisson 三 Redisson分布式锁 1 引入Redisson依赖 2 配置Redis 3 注入RedissonClient 4 使用RLock 总结 一 分
  • 如何使用iAd在应用程序中展示Banner广告

    本文由 Da杯柠檬水 微博 翻译自 AppCoda 原文 Using iAd to Display Banner Ad in Your App 虽然 你可能即将开始开发下一个超级应用程序 你的一切规划和设计都已就绪 但还是有一件事可能你并没
  • Linux内核机制之等待队列

    Linux内核的等待队列是以双循环链表为基础数据结构 与进程调度机制紧密结合 能够用于实现核心的异步事件通知机制 在中 等待队列在源代码树中 这是一个通过连接的典型双循环链表 如下图所示 在这个链表中 有两种数据结构 等待队列头 wait
  • [区块链] 密码学中Hash算法(基础)

    在介绍Hash算法之前 先给大家来个数据结构中对hash表 散列表 的简单解释 然后我再逐步深入 讲解一下hash算法 一 Hash原理 基础篇 1 1 概念 哈希表就是一种以 键 值 key indexed 存储数据的结构 我们只要输入待
  • Node.js 获取当前时间

    1 安装依赖 npm install silly datetime 2 引入依赖 const sd require silly datetime 3 使用 const time sd format new Date YYYY MM DD H
  • IDEA远程断点调试jar包项目

    文章目录 前言 一 准备工作 1 jar包应用 1 IDEA配置 二 断点调试 1 运行jar包 2 访问接口 3 进来断点 三 注意点 总结 前言 springboot 项目在开发完 打成一个 jar 包 放到服务器运行时 如果报错了 怎
  • Java面试上岸秘籍!粉丝刷题一周换工作,爆笑嘲讽竟变大厂青睐

    封面来自一个粉丝的反馈 添加图片注释 不超过 140 字 可选 粉丝通过阿嘴的Java面试库换工作了 刷题一周搞定工作 一周前还被面试官嘲讽 我也替他感觉高兴 没想到题库能帮到他这么多 这是多大的回报率 他也已经成功证明了自己 说实话 像这
  • C++Primer学习笔记(11)

    这篇文章的内容是动态内存 这一块有点进阶了 是之前很少接触过的部分了 关注点有这几个 全局对象 局部对象 局部static对象 动态对象 提炼一下 静态内存 栈内存 自由空间 堆 不同的内存空间有相对应的对象 一 动态内存与智能指针 都是重
  • 【编译原理】SLR(1)分析方法(c++实现)

    基本流程 Created with Rapha l 2 2 0 输入文法 拓广文法 构造DFA 识别活前缀的自动机 SLR 1 分析表 SLR 1 分析输入串
  • 附加:在在下部分区/县(数据表)

    返回上篇文章 全国各省 市 区 全部 sql语句 https blog csdn net m0 55400356 article details 122144741 comments 22531263 附加 sql语句 六 在在下部分区 县
  • Zotero6.0时代来临!新的文献阅读生态

    zotero迎来6 0正式版的更新 内置PDF阅读器与笔记编辑器极大重构了我的文献阅读生态 本文记载了基于6 0版本的zotero配置过程 本文相干的软件与插件如下 相关软件 Zotero SumatraPDF Obsidian Subli
  • length、length()、size() 的区别

    Length 数组的大小 length 字符串的大小 size 集合类 map set list 的大小 length length是一个关键词 主要用于获取数组的长度 对于数组来说 length是一个公有的实例变量 通过数组对象的属性来获
  • 我想用cesium来实现模型压平,代码实现

    使用 Cesium 来实现模型压平可以通过使用其 API 来实现 主要包括 Cesium loadTerrain 和 Cesium sampleTerrainMostDetailed 两个函数
  • 关于git上传代码到云效,git下载云效代码到本地

    一 安装git Git官方下载地址 gt gt https git scm com downloads Standalone Installer 一直点击next就安装好了 根据自己电脑更改安装路径 鼠标右击电脑主屏幕中有 Git命令 说明
  • Mac Navicat12.0.22 安装手册和操作说明

    小编的系统是MacOS Catalina10 15 4 Navicat Premium Mac 12 0 22 一 安装 首先 带大家了解下安装大致流程 安装包的准备 安装 验证 Navicat Premium Mac 12 0 22下载地
  • 分苹果_100分_A/B卷复用_位运算/异或运算

    分苹果 题目描述 A B两个人把苹果分为两堆 A希望按照他的计算规则等分苹果 他的计算规则是按照二进制加法计算 并且不计算进位 12 5 9 1100 0101 9 B的计算规则是十进制加法 包括正常进位 B希望在满足A的情况下获取苹果重量