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

目录

题目

思路

代码


题目

 

思路

        分析该题,要将集合 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.mfbz.cn/a/487011.html

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

相关文章

AtCoder Regular Contest 133 B - Dividing Subsequence 复杂版LIS最长上升子序列

B - Dividing Subsequence 题意&#xff1a; 数组a和数组b&#xff0c;找出最长公共子序列&#xff0c;使得每个b[ i ] 都是 a[ i ]的倍数。 思路&#xff1a; AtCoder Regular Contest 133 B(最长上升子序列) C(思维) - 知乎 这种题应把问题转化&#xff0c;把 要找的 和 …

父类子类构造方法调用示例

父类写无参构造&#xff0c;子类不写构造&#xff0c;实例化子类&#xff0c;会同时调用父类构造方法 public class Father {private String name;private int age;public Father() {System.out.println("父类无参构造");}} public class Son extends Father {priva…

prometheus监控oracle

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一份大厂面试资料《史上最全大厂面试题》&#xff0c;Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

element-ui实现各种证件照上传预览下载组件封装,图片上传回显及长宽自定义功能单个图片上传功能附带源码

element-ui实现证件照上传预览下载组件封装 效果&#xff1a; 参数说明 我只写了两个参数&#xff0c;后续有需求再对其组件进行丰富~ 参数说明fileListProp用来存储上传后后端返回的图片UR了uploadUrl图片上传返回的URL后端接口地址widthProp图片上传框的宽度heightProp图片…

人脸聚类原理和算法解释

人脸聚类是指将大量人脸图像根据它们的相似性分组到不同的群集中的过程。人脸聚类通常利用人脸的特征向量表示来度量人脸之间的相似性&#xff0c;并将相似的人脸图像聚集在一起。 以下是人脸聚类的一般原理&#xff1a; 人脸特征提取&#xff1a;对每张人脸图像提取特征向量。…

FPGA结构与片上资源

文章目录 0.总览1.可配置逻辑块CLB1.1 6输入查找表&#xff08;LUT6&#xff09;1.2 选择器&#xff08;MUX&#xff09;1.3 进位链&#xff08;Carry Chain&#xff09;1.4 触发器&#xff08;Flip-Flop&#xff09; 2.可编程I/O单元2.1 I/O物理级2.2 I/O逻辑级 3.布线资源4.其…

为什么静态成员函数不能是虚函数

在面向对象编程中&#xff0c;静态成员函数和虚函数都是常见的概念&#xff0c;但它们之间存在着本质上的差异。由于其特性上的差异&#xff0c;静态成员函数不能声明为虚函数。下面我们来探讨一下为什么静态成员函数不能是虚函数。 我在网上查到最多的说法是静态函数没有this指…

机场防鸟 | 真驱鸟煤气炮驱鸟器产品分析

机场的机坪跑道上&#xff0c;飞机频繁起降&#xff0c;而在机场的上空&#xff0c;偶尔会有几只灵活的小鸟&#xff0c;趁着飞机起降的间隙&#xff0c;在机坪区穿梭&#xff0c;它们或许在寻找食物&#xff0c;或许只是在享受这片广阔的天空。 对于机场驱鸟员来说&#xff0c…

嵌入式学习44-哈希算法和排序算法

Hash 哈希算法&#xff1a; 在记录的 存储位置 和它的 关键字 之间建立一种去特定的对应关系&#xff0c;使得每个关键字key对应一个存储位置&#xff1b; 查找时&#xff0c;根据确定的对应关系&#xff0c;找到给定的 key 的映射。 记录的存储位置 f&a…

vscode安装mysql相关插件

在Visual Studio Code (VSCode) 中安装 MySQL 客户端插件可以让你在 VSCode 中直接连接到 MySQL 数据库&#xff0c;并执行 SQL 查询。以下是如何安装和使用 MySQL 客户端插件的步骤&#xff1a; 1.打开 VSCode。 2.按下 Ctrl Shift X 打开扩展商店&#xff08;或点击侧边栏…

Mysql - date、datetime、timestamp 的区别

date、datetime 的区别 顾名思义&#xff0c;date 日期&#xff0c;datetime 日期时间&#xff0c;所以 date 是 datetime 的日期部分MySQL 以 格式检索和显示 datetime 值 YYYY-MM-DD hh:mm:ss datetime 支持的日期时间范围 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 d…

SpringBoot学习之ElasticSearch下载安装和启动(Windows版)(三十)

本文先写windows下的下载安装和启动,后续有时间再补充其他环境下(Mac、Linux、Docker)的,这里我们后续对ElasticSearch简称为ES,读者习惯这一称呼就好。 一,ES下载 可以百度【ElasticSearch官网】或者直接点击这里的ES官网下载地址:​​​​​ Download Elasticsearch…

电路笔记 :灯光画 元器件焊接+连锡处理

https://oshwhub.com/qazwsx1987/dengguanghua_0#P3 基础工具 常用的电路焊接工具&#xff1a; 工具描述电烙铁我买了一个便携电烙铁&#xff0c;但是烙铁头温度太低&#xff0c;焊锡总是粘在烙铁头上&#xff08;因为电量不足&#xff09;, 打火机秒变电烙铁焊台用于支撑工…

集成学习 | 集成学习思想:Boosting思想 | XGBoost算法、LightGBM算法

目录 一. XGBoost 算法1. XGBoost 算法流程2. XGBoost 算法评价 二. LightGBM 算法2. LightGBM 算法优势 上一篇文章中&#xff0c;我们了解了Boosting思想的两种算法&#xff1a;Adboost和GBDT&#xff1b;其中对于GBDT算法&#xff0c;存在两种改进&#xff0c;即&#xff1a…

SQLAlchemy操作数据库

数据库是一个网站的基础。 比如 MySQL 、 MongoDB 、 SQLite 、 PostgreSQL 等&#xff0c;这里我们以 MySQL为例进行讲解。 SQLAlchemy 是一个 ORM 框架 我们会以 MySQL SQLAlchemy 组合进行讲解。 在操作数据库操作之前&#xff0c;先确保你已经安装了以下两个插件&#…

阿里云服务器新/老用户优惠价格收费标准(2024最新更新)

2024年阿里云服务器优惠价格表&#xff0c;一张表整理阿里云服务器最新报价&#xff0c;阿里云服务器网整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单&#xff0c;大家也可以直接移步到阿里云CLUB中心查看 aliyun.club 当前最新的云服务器优惠券…

鸿蒙(HarmonyOS)版Retrofit网络请求框架

注意 从3.0开始&#xff0c;官方已经废弃Java了。鸿蒙最终选择了高效简洁的JS/eTS语言为主要开发语言&#xff0c;即从3.0 Beta开始&#xff0c;鸿蒙将重心主要放在JS类Web式、eTS声明式两大类开发范式&#xff0c;兼容C/C类。Java类API不再演进&#xff0c;但是会持续运营维护…

前台处理:CO主数据之成本中心-<KS01>

一、背景&#xff1a; 前面讲解了成本要素和成本要素组&#xff0c;我们继续介绍成本控制与核算的主数据之成本中心&#xff0c;成本控制分主数据篇和业务篇&#xff1a; 主数据篇主要内容&#xff1a;成本要素、成本中心、订单、作业类型、工作中心&#xff1b; 业务篇主要…

Spring boot2.7整合jetcache方法缓存 设置定时刷新 解决多系统同时操作数据问题

上文 Spring boot2.7整合jetcache方法缓存 处理数据发生变化时同步更新缓存 删除缓存操作 解决了 缓存更新的问题 但是 现在有个问题 例如 我们 A系统 和 B系统 同时缓存了这一组数据 但是 A系统数据发生了更新 但是 B系统并不知道 其实 也没有特别好的办法同步通知 但可以控…