2024/3/23打卡数组分割(第14届蓝桥杯)——二项式+快速幂

news/2024/5/20 1:55:11/文章来源:https://blog.csdn.net/weixin_63001635/article/details/137038680

 题目

 

思路

        分析该题,要将集合 A 划分成两个子集 a_i,a_j ,且两个子集的和都是偶数。

可知:偶数 + 偶数 = 偶数;偶数 + 奇数 = 奇数;奇数 + 奇数 = 偶数;

分析可得:如果该集合的和为奇数,就不能分成两个和是偶数的子集。否则,可以划分。

        因此我们只需要判断集合的和为偶数的所有子集的方案。再根据已知可得,我们只需要保证某个子集,比如 a_i 的和为偶数,则另一个子集之和必然为偶数。

如何计算子集为偶数的所有方案数?

        如果我们想要子集的和全是偶数,那我们可以选择:

  1.  全是偶数的数来作为子集(剩下的为偶数-偶数=偶数)
  2. 或者偶数个奇数来作为子集(偶数个奇数之和=偶数)

        最后将二者相乘(相当于全是偶数的各个方案与偶数个奇数的各个方案进行合并,合并后子集的仍然是偶数),就可以得出所有方案。

如何找全是偶数的方案?

        我们可以在集合 A 中找到偶数的个数,记为 r,奇数的个数记为 l 。

        那么我们只需要在 r 个偶数中选取全是偶数的方案(剩下的元素和也一定是偶数)。

        那么我们可以选取 0 个,1 个,2 个... r 个。

        相当于 C(r,0)+C(r,1)+C(r,2)+....+C(r,r)

        那么就可以使用二项式定理 (1+1)^r= \sum_{x=0}^{r}C_r^x=C_r^0+C_r^1+C_r^2+...+C_r^r

        因此全是偶数的方案个数为:2^r

 如何找偶数个奇数的方案?

        与找偶数类似

        我们选取 0 个,2 个,4 个... 奇数。

        相当于 C(l,0)+C(l,2)+C(l,4)+....

        二项式定理  (1+1)^l= \sum_{x=0}^{l}C_l^x \ \ \ \ \ \ \ \ \ \ \ \ \ =C_l^0+C_l^1+C_l^2+...+C_l^r        ①

                            (1-1)^l= \sum_{x=0}^{l}C_l^x1^{l-x}(-1)^x=C_l^0-C_l^1+C_l^2-C_l^3                 ②

        ①和②相加可得 2^l=2(C_l^0+C_l^2+C_l^4+...)

        那么偶数个奇数的方案个数为 C_l^0+C_l^2+C_l^4+... =2^{l-1}

总方案个数为 2^r*2^{l-1}

代码

可以使用快速幂思想,计算更快 快速幂(求解原理+例题)-CSDN博客

 数据范围小我就没用

import java.io.*;class Main{static int N = 1010 , mod = 1000000007;static int t;static int[] a = new int[N];public static void main(String[] args) throws IOException{BufferedReader in = new BufferedReader(new InputStreamReader(System.in));t = Integer.parseInt(in.readLine());while(t-->0){int l=0,r=0; // 分别表示奇数,偶数的个数int n = Integer.parseInt(in.readLine());String[] s = in.readLine().split(" ");for(int i=1;i<=n;i++) {a[i] = Integer.parseInt(s[i-1]); if(a[i]%2==0) r++;else l++;}if(l%2!=0){ // 如果有奇数个奇数,说明集合之和为奇数System.out.println(0);continue;} long rs = 1,ls = 1; // 分别计算2^r,2^(l-1)for(int i=0;i<r;i++) rs = (rs*2)%mod;for(int i=0;i<l-1;i++) ls = (ls*2)%mod;System.out.println((rs*ls)%mod);}}
}

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

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

相关文章

八、C#计数排序算法

简介 计数排序是一种非比较性的排序算法&#xff0c;适用于排序一定范围内的整数。它的基本思想是通过统计每个元素的出现次数&#xff0c;然后根据元素的大小依次输出排序结果。 实现原理 首先找出待排序数组中的最大值max和最小值min。 创建一个长度为max-min1的数组count…

IP如何异地共享文件?

【天联】 组网由于操作简单、跨平台应用、无网络要求、独创的安全加速方案等原因&#xff0c;被几十万用户广泛应用&#xff0c;解决了各行业客户的远程连接需求。采用穿透技术&#xff0c;简单易用&#xff0c;不需要在硬件设备中端口映射即可实现远程访问。 异地共享文件 在…

Calico配置路由反射器 (RR) 模式

RR介绍 在 Calico 网络中&#xff0c;默认使用 Node-to-Node Mesh 全互联模式&#xff0c;即集群中的每个节点之间都会相互建立 BGP 连接&#xff0c;用于路由交换。然而&#xff0c;随着集群规模的扩大&#xff0c;全互联模式会导致连接数成倍增加&#xff0c;产生性能问题。为…

Linux 注入依赖环境

文章目录 配置依赖程序安装 JDK安装 Tomcat安装 mysql 配置依赖程序 下面配置依赖程序都以CentOS为例。 安装 JDK 可以直接使用 yum(CentOS) 直接进行安装。 先搜索&#xff0c;确定软件包的完整名称。 yum list | grep jdk再进行安装 进行安装的时候一定要先确保处在“管理…

前端学习--品优购项目

文章目录 前端学习--品优购项目1.案例铺垫文件建立与命名必备文件网站favicon图标网站TDK三大标签SEO优化常用命名 2.LOGO SEO优化3.实际代码4.申请免费域名 前端学习–品优购项目 1.案例铺垫 文件建立与命名 一个项目中为了方便实用和查找内容会有多个文件夹&#xff0c;比如…

idea插件开发案例:将批量插入方法转换成分批批量插入

代码: idea-plugin-demo 1.背景 excel导入时都会使用批量插入或者批量更新到数据库&#xff0c;这在mysql下没有问题。 但因为公司国产化需求&#xff0c;换成达梦数据库就不行了&#xff0c;报sql超长。 一开始想写mybatis拦截器处理&#xff0c;又怕出现bug&#xff0c;这个问…

MySQL为什么会选错索引

在平时不知道一有没有遇到过这种情况&#xff0c;我明明创建了索引&#xff0c;但是MySQL为何不用索引呢&#xff1f;为何要进行全索引扫描呢&#xff1f; 一、对索引进行函数操作 假设现在维护了一个交易系统&#xff0c;其中交易记录表 tradelog 包含交易流水号(tradeid)、交…

Ubuntu 中如何选择Java版本

如何在 Ubuntu 上安装多个版本的 Java 首先&#xff0c;我们得检查一下你的系统里是否已经装了 Java。这个很简单&#xff0c;只需运行下面这条命令&#xff1a; 在 Linux 上安装 Java 的实战示例update-java-alternatives --list 输出结果&#xff1a; 检查是否安装了 Java…

存储的过程

一、存储过程 1.1 概述 存储过程可以轻松而高效的去完成这个需求&#xff0c;有点类似shell脚本里的函数 1.2 特点 存储过程在数据库中创建并保存&#xff0c;它不仅仅是 SQL 语句的集合&#xff0c;还可以加入一些特殊的控制结构&#xff0c;也可以控制数据的访问方式。存储过…

lora-scripts 训练IP形象

CodeWithGPU | 能复现才是好算法CodeWithGPU | GitHub AI算法复现社区&#xff0c;能复现才是好算法https://www.codewithgpu.com/i/Akegarasu/lora-scripts/lora-trainstable-diffusion打造自己的lora模型&#xff08;使用lora-scripts&#xff09;-CSDN博客文章浏览阅读1.1k次…

web 技术中前端和后端交互过程

1、客户端服务器交互过程 客户端:上网过程中,负责浏览资源的电脑,叫客户端服务器:在因特网中,负责存放和对外提供资源的电脑叫服务器 服务器的本质: 就是一台电脑,只不过相比个人电脑它的性能高很多,个人电脑中可以通过安装浏览器的形式,访问服务器对外提供的各种资源。 个人…

如何在vue中使用echarts,与jquery中有啥不同。

一、vue中使用echarts的步骤 在 Vue 中使用 ECharts 可以按照以下步骤进行&#xff1a; 安装 ECharts&#xff1a;使用 npm 或 yarn 安装 ECharts&#xff1a; npm install echarts 在 Vue 组件中引入 ECharts&#xff1a; import echarts from echarts 在 Vue 组件的 mou…

http响应练习—在服务器端渲染html(SSR)

一、什么是服务器端渲染&#xff08;SSR&#xff09; 简单说&#xff0c;就是在服务器上把网页生成好&#xff0c;整个的HTML页面生成出来&#xff0c;生成出的页面已经包含了所有必要的数据和结构信息&#xff0c;然后直接发给浏览器进行展现。 二、例题 要求搭建http服务&a…

QT_day4:对话框

1、完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&…

其实StartAI也是一款修图工具 用StartAI修图之“去除背景”

其实StartAI不仅仅是一款AI绘画插件&#xff0c;更是一款可以对我们的摄影图片、广告海报进行修图的AI修图工具。StartAI包含了AI绘画、AI修图等多种复合型AI智能实用工具。 用【背景移除】功能对图片一个背景修图 1.实体广告图片 我们可以通过【背景移除】将广告图中的实体…

软考中级 --网络工程师真题试卷 2023下半年

在EIGRP协议中&#xff0c;某个路由器收到了两条路径到达目标网络&#xff0c;路径1的带宽为100Mbps&#xff0c;延迟2ms&#xff0c;路径2的带宽为50Mbps&#xff0c;迟为4ms&#xff0c;如果EIGRP使用带宽和延迟的综合度量标准&#xff0c;那么该路由器选择的最佳路径是(D)。…

【Flink】WaterMark 实战

WaterMark 实战 1.WaterMark 触发详解2.实际案例 1.WaterMark 触发详解 例如&#xff0c;现在我们有了一个 [12:00:00-12:00:10) 的时间窗口&#xff0c;现在事件如下图所示顺序 A、B、C、D、E、F … 到达。 在未设置 WaterMark 的情况下&#xff0c;当元素 C 到达的时候&…

[Semi-笔记]Switching Temporary Teachers for Semi-Supervised Semantic Segmentation

目录 概要创新一&#xff1a;Dual Temporary Teacher挑战&#xff1a;解决&#xff1a; 创新二&#xff1a;Implicit Consistency Learning&#xff08;隐式一致性学习&#xff09;挑战&#xff1a;解决&#xff1a; 实验结果小结论文地址代码地址 分享一篇2023年NeurIPS的文章…

Fastjson反序列化漏洞原理与漏洞复现(基于vulhub靶场)

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

python实战之宝塔部署flask项目

一. 项目 这个demo只是提供了简单的几个api接口, 并没有前端页面 # -*- coding: utf-8 -*- import flask as fk from flask import jsonify, requestapp fk.Flask(__name__)app.route(/api/hello, methods[GET]) def get_data():return hello world# 假设我们要提供一个获取用…