当前位置: 首页 > news >正文

【蓝桥备赛】数组分割——组合数学?

题目链接

数组分割

个人思路

两个数组都需要和为偶数,那么就去思考一个数组如何才能和是偶数呢??

数组里肯定要么是奇数要么是偶数,偶数无论有多少个,都不会改变一个数组的奇偶性。但是奇数个奇数的和还是奇数,偶数个奇数的和就会是偶数(这个应该就不用证明了吧)。

那么这个问题就被转换为,求数组中奇数的个数!

当我们遍历完数组后,获取到数组中奇数与偶数的个数。如果奇数的数量为奇数,那么我们无论怎么去分,都无法将奇数个奇数分成两边都是偶数个奇数(即奇数无法拆成两个偶数),这种情况下,答案的个数就为 0

那么如果为偶数(n)个奇数,那么我只需要每次从奇数中选择0,2,4,… ,n个奇数作为其中一个集合的数,剩下的交给另外一个集合,这就是数学中的组合问题,用公式表示就是:
C n 0 + C n 2 + … + C n n = 2 n − 1 C_{n}^{0}+C_{n}^{2}+\ldots +C_{n}^{n}=2^{n-1} Cn0+Cn2++Cnn=2n1
对于偶数的话,我们就没有那么多限制,直接从中选取0,1,2,3,… ,n个偶数,随意组合:公式就是
C n 0 + C n 1 + C n 2 + … + C n n = 2 n C _{n}^{0}+C_{n}^{1}+C_{n}^{2}+\ldots +C_{n}^{n}=2^{n} Cn0+Cn1+Cn2++Cnn=2n
不过这边存在一个问题,如果奇数的个数为0个,那么就不存在 n-1的情况,所以需要特别处理。
另外在计算这些的过程中,可能会出现数过大的情况需要取模运算,我直接选择了快速幂。

参考代码

Java

import java.util.Scanner;public class Main {static int n;static long[] arr;static long res;static long MOD = 1000000007;static long ksm(long a, long b) {long cnt = 1;while (b > 0) {if ((b & 1) == 1) {cnt = cnt * a % MOD;}a = a * a % MOD;b >>= 1;}return cnt;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int t = sc.nextInt();while (t-- > 0) {n = sc.nextInt();arr = new long[n + 1];// odd 奇数个数int odd = 0;for(int i = 1; i <= n; ++i) {arr[i] = sc.nextLong();if(arr[i] % 2 == 1) {++odd;}}// 一个数组的和是否是偶数,取决于奇数的个数一定要是偶数个,剩余偶数的组合随意int even = n - odd;// 如果奇数的个数为奇数个,那么就无法组成和为偶数的数组if (odd % 2 == 1) {System.out.println(0);continue;}// 对于每一个奇数情况,都相当于从odd个中选i个(组合公式),但是i必须是偶数个// 选择完奇数后,剩余偶数从选0个到全选// 也就是在求 2^(odd - 1) * 2^even// 啊!!!震惊// 不过如果奇数为 0 个,此处就不用减去1了if(odd == 0) {res = ksm(2, even);} else {res = ksm(2, even) * ksm(2, odd - 1) % MOD;}System.out.println(res);}}
}

C++

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e3 + 3;
const ll MOD = 1000000007;int n;
ll arr[N];
ll res;ll ksm(ll a, ll b) {ll cnt = 1;while (b > 0) {if (b & 1) {cnt = (cnt * a) % MOD;}a = (a * a) % MOD;b >>= 1;}return cnt;
}int main() {int t;cin >> t;while (t-- > 0) {cin >> n;int odd = 0;for (int i = 1; i <= n; ++i) {cin >> arr[i];if (arr[i] % 2 == 1) {++odd;}}int even = n - odd;if (odd % 2 == 1) {cout << 0 << endl;continue;}if (odd == 0) {res = ksm(2, even);} else {res = (ksm(2, even) * ksm(2, odd - 1)) % MOD;}cout << res << "\n";}return 0;
}

相关文章:

【蓝桥备赛】数组分割——组合数学?

题目链接 数组分割 个人思路 两个数组都需要和为偶数&#xff0c;那么就去思考一个数组如何才能和是偶数呢&#xff1f;&#xff1f; 数组里肯定要么是奇数要么是偶数&#xff0c;偶数无论有多少个&#xff0c;都不会改变一个数组的奇偶性。但是奇数个奇数的和还是奇数&…...

iphone5s基带部分电源部分主主电源供电及

时序: 1.,基带电源的供电&#xff0c;基带电源也叫pmu。 首先时序图说电池提供供电&#xff0c;电池是J6接口&#xff0c;视频习惯把接口称之为座子。查U2_RF芯片&#xff0c;发现供电信号为PP_BATT_VCC_CONN&#xff0c;但是没查到跟电池座子有关系&#xff0c;电池座子写的是…...

【每日一题】按分隔符拆分字符串

文章目录 Tag题目来源解题思路方法一&#xff1a;遍历方法二&#xff1a;getline 写在最后 Tag 【遍历】【getline】【字符串】【2024-01-20】 题目来源 2788. 按分隔符拆分字符串 解题思路 方法一&#xff1a;遍历 思路 分隔符在字符串开始和结束位置时不需要处理。 分隔…...

spawn_group_template | spawn_group | linked_respawn

字段介绍 spawn_group | spawn_group_template 用来记录与脚本事件或boss战斗有关的 creatures | gameobjects 的刷新数据linked_respawn 用来将 creatures | gameobjects 和 boss 联系起来&#xff0c;这样如果你杀死boss&#xff0c; creatures | gameobjects 在副本重置之前…...

软考系分之计算机网络规划设计、综合布线、RAID和网络存储等

文章目录 1、概要2、网络的三层模型3、综合布线系统4、廉价磁盘冗余阵列&#xff08;RAID&#xff09;5、网络存储6、总结 1、概要 本篇重点介绍计算机网络中的网络规划设计、综合布线、RAID和网络存储。 2、网络的三层模型 三层模型分为核心层、汇聚层和接入层&#xff0c;接…...

使用ElEment组件实现vue表单校验空值

1.绑定表单组件数组rules 2.在data域中设定组件rules 3.设定调用方法函数 提交校验 取消&#xff1a; 测试页面 提交空值 失去焦点 取消重置 提交后重置...

processing集训day01

介绍 Processing是一门开源编程语言&#xff0c;提供了对图片&#xff0c;动画和声音进行编程的环境。学生&#xff0c;艺术家&#xff0c;设计师&#xff0c;建筑师&#xff0c;研究人员和业余爱好者可以使用Processing进行学习&#xff0c;制作原型以及作为生产工具。你可以…...

java面试——juc篇

目录 一、线程基础 1、进程与线程的区别&#xff1f;&#xff08;⭐⭐⭐&#xff09; 2、并行和并发的区别&#xff08;⭐&#xff09; 3、创建线程的方式有哪些&#xff1f;&#xff08;⭐⭐⭐⭐&#xff09; runnable和Callable的区别&#xff1a; 线程中的run()和 star…...

CSS 实现卡片以及鼠标移入特效

CSS 实现卡片以及鼠标移入特效 文章目录 CSS 实现卡片以及鼠标移入特效0、效果预览默认鼠标移入后 1、创建卡片组件2、添加样式3、完整代码 0、效果预览 默认 鼠标移入后 在本篇博客中&#xff0c;我们将探讨如何使用 CSS 来实现卡片组件&#xff0c;并添加鼠标移入特效&#…...

芯课堂 | SWM34S系列驱动TFT-LCD显示模组应用基本注意事项

1、确认硬件的连接、包括电源、地、RGB 数据线、DCLK\DE\HSYNC\VSYNC 等&#xff0c;显示模组有 DISP、RESET、CS、SCL、SDA 等。 2、确认各电压的正常&#xff0c;包括电源&#xff0c;部分有 IOVCC、VGL、VGH、VCOM 等电压 3、如果应用的 TFT-LCD 模组非演示例程中已适配调…...

java8 列表通过 stream流 根据对象属性去重的三种实现方法

java8 列表通过 stream流 根据对象属性去重的三种实现方法 一、简单去重 public class DistinctTest {/*** 没有重写 equals 方法*/SetterGetterToStringAllArgsConstructorNoArgsConstructorpublic static class User {private String name;private Integer age;}/*** lombo…...

鸿蒙开发DevEco Studio Setup 工具认识及使用

1、界面认识 1.1 创建页面之前理解Ability 1.2 理解stage模式 1.3 工程级别目录结构 1.4 模块级别目录...

程序员裁员潮:技术变革下的职业危机

程序员裁员潮&#xff1a;技术变革下的职业危机 一对来自中国的工程师夫妻在美身亡&#xff0c;疑因谷歌裁员致悲剧发生。在技术变革下&#xff0c;裁员对于程序员的影响到底有多大&#xff1f;快来和我们分享一下你的看法吧~ 哎&#xff0c;这是悲哀&#xff0c;让我又想起来…...

Cesium快速入门

文章目录 0.引言1.Cesium环境搭建1.1安装Node.js环境1.2配置Cesium依赖 2.搭建第一个Cesium程序2.1引入源码编译结果2.2创建html文件2.3编写第一个Cesium程序2.4申请许可密钥2.5发布Cesium程序服务 3.界面介绍4.默认控件介绍 0.引言 现有的gis开发方向较流行的是webgis开发&am…...

Android.mk和Android.bp的区别和转换详解

Android.mk和Android.bp的区别和转换详解 文章目录 Android.mk和Android.bp的区别和转换详解一、前言二、Android.mk和Android.bp的联系三、Android.mk和Android.bp的区别1、语法&#xff1a;2、灵活性&#xff1a;3、版本兼容性&#xff1a;4、向后兼容性&#xff1a;5、编译区…...

卡尔曼滤波器原理By_DR_CAN 学习笔记

DR_CAN卡尔曼滤波器 Kalman Filter Recursive Algorithm迭代过程 数学基础正态分布和6-SigmaData FusionCovariance MatrixState Space Representation离散化推导 linearizationTaylor Series2-DSummary Step by Step Derivation of Kalman Gain矩阵求导公式 Prior / Posterio…...

013 异常

文章目录 异常人为创造异常 异常 定义:运行时检测的错误 try:可能触发异常的语句 except 错误类型1 [as 变量1]:处理语句1 except 错误类型2:处理语句2 except Exception:不是以上错误类型的处理语句 else:未发生异常的语句 finally:无论是否发生异常的语句异常处理:保障程序…...

微服务Spring Cloud架构详解

"Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具&#xff08;例如配置管理&#xff0c;服务发现&#xff0c;断路器&#xff0c;智能路由&#xff0c;微代理&#xff0c;控制总线&#xff09;。分布式系统的协调导致了样板模式, 使用Spring Cloud开…...

推荐一一款小众黑科技工具,低调使用建议收藏

wireshark是个啥就不多说了&#xff0c;非常流行的网络封包分析软件。 可以截取各种网络封包&#xff0c;显示网络封包的详细信息。 软件功能十分强大&#xff0c;操作也不复杂。 很多小友都在后台问能不能出一期完整的抓包分析贴&#xff0c;今天给你们安排上了哈。 01 W…...

HiP框架:多AI模型联手,助力机器人驾驭复杂规划大局

原创 | 文 BFT机器人 你的日常待办清单或许只是些稀松平常的小事&#xff1a;清洗堆积如山的碗盘、采购琳琅满目的食品杂货等。在执行这些任务时&#xff0c;你无需逐一写下“捧起那只满是油污的盘子”或“用湿润的海绵仔细擦洗这个盘子”这样的琐碎步骤&#xff0c;因为在你的…...

别再被机械按键坑了!FPGA消抖模块Verilog代码保姆级解析(附仿真波形)

FPGA按键消抖实战&#xff1a;从原理到Verilog实现的深度解析 刚接触FPGA开发的朋友们&#xff0c;一定遇到过这样的困扰——明明按下了按键&#xff0c;系统却像没反应一样&#xff1b;或者只按了一次&#xff0c;设备却识别出多次触发。这背后隐藏着一个看似简单却至关重要的…...

ISL29125 RGB环境光传感器驱动与嵌入式应用实战

1. ISL29125 RGB环境光传感器技术解析与嵌入式驱动开发实践ISL29125 是 Intersil&#xff08;现属 Renesas&#xff09;推出的一款高精度、低功耗、IC 接口的 RGB 环境光传感器&#xff08;Ambient Light Sensor, ALS&#xff09;&#xff0c;专为智能手机、平板电脑、可穿戴设…...

Excel报表自动化:用JXLS实现动态数据填充的5个高级技巧

Excel报表自动化&#xff1a;用JXLS实现动态数据填充的5个高级技巧 每次看到同事手动复制粘贴数据到Excel模板时&#xff0c;我都忍不住想分享JXLS这个神器。作为Java开发者&#xff0c;我们完全可以用代码实现专业级报表自动化&#xff0c;告别重复劳动。本文将带你深入JXLS的…...

Atmosphere系统功能扩展指南:从基础配置到高级应用的完整学习路径

Atmosphere系统功能扩展指南&#xff1a;从基础配置到高级应用的完整学习路径 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 问题导入&#xff1a;为什么需要自定义系统 想象一下&#x…...

开发者跨界金融科技:机遇与技能图谱

一、金融科技浪潮下的测试新机遇1.1 行业爆发式增长催生人才缺口全球金融数智化进程加速&#xff0c;银行业持续加码科技投入。据公开数据显示&#xff0c;2024年仅国有六大行金融科技投入超1250亿元&#xff0c;同比增长约2%。业务快速迭代与用户体验升级需求&#xff0c;推动…...

10大好用的班组建设系统盘点!助力企业高效开展班组建设

在2026年数字化转型的深水区&#xff0c;班组建设系统已成为企业夯实基层管理、提升执行力的核心引擎。面对市场上琳琅满目的工具&#xff0c;如何筛选出真正好用的班组建设系统&#xff0c;切实助力企业高效开展班组建设&#xff0c;是管理者面临的首要难题。本文深度盘点10大…...

BilibiliDown:三分钟掌握跨平台B站视频批量下载终极方案

BilibiliDown&#xff1a;三分钟掌握跨平台B站视频批量下载终极方案 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirrors…...

CSS 嵌套语法最佳实践:从入门到精通的完整指南

CSS 嵌套语法最佳实践&#xff1a;从入门到精通的完整指南 CSS 是流动的韵律&#xff0c;JS 是叙事的节奏。而 CSS 嵌套&#xff0c;是让这份韵律更加优雅、结构更加清晰的魔法。 一、CSS 嵌套&#xff1a;现代样式表的革命 CSS 嵌套&#xff08;Nesting&#xff09;是 CSS 原…...

实测通义千问3-Reranker-0.6B:轻量模型如何让电商商品搜索更准确

实测通义千问3-Reranker-0.6B&#xff1a;轻量模型如何让电商商品搜索更准确 1. 电商搜索的痛点与解决方案 在电商平台上&#xff0c;用户输入"真丝连衣裙"却看到牛仔裤推荐&#xff0c;这种糟糕的搜索体验每天都在发生。传统搜索技术依赖关键词匹配和简单规则&…...

避坑指南:ThingsBoard部件开发中5个常见错误与优化方案(附跑马灯Demo代码)

ThingsBoard部件开发实战&#xff1a;5个高频踩坑点与性能优化技巧&#xff08;含跑马灯完整实现&#xff09; 最近在技术社区看到不少开发者讨论ThingsBoard部件开发中的"玄学问题"——明明按照文档操作却出现各种诡异现象。作为经历过完整产品开发周期的技术负责人…...