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);
        }
    }
}

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

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

相关文章

jQuery实现的会员中心安全修改表单特效代码

jQuery实现的会员中心安全修改表单特效代码是一款实现了可以修改登录密码&#xff0c;交易密码&#xff0c;手机号码&#xff0c;实名认证&#xff0c;电子邮箱&#xff0c;安全设置表单&#xff0c;会员表单等设置效果的代码 下载地址 https://www.qqmu.com/2635.html

卡行领航家用户端是怎么拼团怎么挣钱的?

#领航家代理政策/怎么代理/奖金制度/双2.0模式# 全国V&#xff1a;ok1234vip 领航家用户端&#xff1a;0.52费率 一次拼团0.44费率 两次拼团0.36费率 三次拼团0.2费率 ………… 十次拼团&#xff0c;客户每月挣20480 领航家代理端&#xff1a;无押激活返现高达166/台 分润万5-万…

智慧公厕的全域感知、全网协同、全业务融合和全场景智慧赋能

公共厕所是城市的重要组成部分&#xff0c;为市民提供基本的生活服务。然而&#xff0c;传统的公厕管理模式存在诸多问题&#xff0c;如排队等候时间长、卫生状况差、空气质量差等&#xff0c;严重影响市民的出行和生活质量。为了解决这些问题&#xff0c;智慧公厕应运而生&…

Spring IOC 容器的加载过程(bean 的创建过程)

Spring IOC 容器的加载过程&#xff08;bean 的创建过程&#xff09; 配置Bean 通过xml或者是Component Bean 等进行配置 解析Bean,得到BeanDefinition定义对象 通过 BeanDefintionReader 将 bean 进行解析&#xff0c;准备要创建的bean对象的定义对象BeanDefinition,存放到Be…

ATA-2048高压放大器在医疗中的作用是什么

高压放大器在医疗设备和医学应用中发挥着至关重要的作用。它们是一种专用的电子设备&#xff0c;用于放大医学图像和信号&#xff0c;以便医生能够更准确地诊断和治疗病患。下面西安安泰将详细介绍高压放大器的作用、原理和应用领域。 高压放大器是专门设计用于处理医学图像和信…

CrossOver虚拟机软件2024中文版最新功能介绍

CrossOver是一款由CodeWeavers公司开发的&#xff0c;运行在Mac和Linux操作系统下&#xff0c;能够模拟Windows系统应用运行环境的软件。它不需要用户单独安装Windows操作系统&#xff0c;就能让Windows平台上的应用程序在Mac和Linux上顺畅运行。CrossOver在技术上使用了Wine&a…

【数据存储】TIDB和MySQL的区别

1.TIDB和MySQL对比 对比内容MySQLTiDB架构设计一个传统的单机数据库系统&#xff0c;采用主从复制和分区表等方式来实现水平扩展一个分布式的 NewSQL 数据库&#xff0c;采用分布式存储和分布式事务等技术&#xff0c;支持水平扩展和高可用性事务支持 InnoDB 存储引擎来支持事…

一篇文章给你讲清楚正常卷积与深度可分离卷积

文章目录 正常卷积深度可分离卷积深度卷积逐点卷积 对比代码实现查看&#xff08;torch实现&#xff09;结果 正常卷积 也就是我们平常用的比较普遍的卷积&#xff1a; 它的参数量是&#xff1a;112&#xff0c;即&#xff1a; ( 卷积核大小&#xff09; ∗ 输入通道 ∗ 输出…

【JavaEE】_Spring MVC项目获取URL中的参数

目录 1. 单参数 2. 多参数 1. 单参数 .java文件如下&#xff1a; package com.example.demo.controller;import com.example.demo.Person; import org.springframework.web.bind.annotation.*;import java.util.Arrays; import java.util.List;RequestMapping("/Para&…

MFC 打开类向导中方法时提示对com组件的调用返回了错误 HRESULT E_FAIL

解决&#xff1a;头文件中要分类&#xff0c;把virtual和afx_msg等放在一起&#xff0c;不要交叉错开。 MFC&#xff08;Microsoft Foundation Class&#xff09;中的virtual关键字用于声明虚函数。虚函数是C中实现多态的一种机制&#xff0c;它允许派生类重新定义基类中的虚函…

FreeRtos学习笔记(12)systemView 分析任务调度情况

FreeRtos学习笔记&#xff08;12&#xff09;systemView 分析任务调度情况 使用stm32f429 freertosV10.5.1 systemView 3.5 keil AC5 systemView 移植 从官网下载 systemView 软件 将下面文件添加到工程中 freertos 修改 systemView 需要 FreeRTOSConfig.h 开启如下宏, …

UE小:CesiumForUnreal使用教程

联网模式&#xff08;需要翻墙&#xff09; 直接打开工程并点击Cesium插件图标然后点击connect to Cesium ion进行账号注册即可使用 见到如界面后点击Allow并返回UE编辑器&#xff08;如果无法打开认证界面请先访问https://ion.cesium.com/并且不要关闭&#xff0c;再次点击co…

Fendi Club啤酒:畅享时尚的味蕾之旅

在这个追求个性与品味的时代&#xff0c;Fendi Club啤酒以其时尚的魅力&#xff0c;领着时尚潮流与味蕾的完善结合。它不仅是一款啤酒&#xff0c;更是一种生活态度的象征&#xff0c;让我们一起踏上这场畅享时尚的味蕾之旅。 Fendi Club啤酒的特别之处在于它对品质的别致追求。…

SQL映射文件

一、SQL映射的xml文件 1.1 mapper元素 二、select 三、别名与Java映射 四、resultMap 啊

专题一_双指针(2)

目录 LCR 179. 查找总价格为目标值的两个商品 解析 题解 15. 三数之和 解析 题解 18. 四数之和 解析 题解 LCR 179. 查找总价格为目标值的两个商品 LCR 179. 查找总价格为目标值的两个商品 - 力扣&#xff08;LeetCode&#xff09; 解析 题解 class Solution { publi…

软件架构复用相关知识总结

一、软件产品线 软件产品线是指一组软件密集型系统&#xff0c;它们共享一个公共的、可管理的特性集&#xff0c;满足某个特定市场或任务的具体需求&#xff0c;是以规定的方式用公共的核心资产集成开发出来的。即围绕核心资产库进行管理、复用、集成新的系统。采用产品线能够提…

前端学习-HTML基础

一、简介 1.介绍 网页就是html文件&#xff0c;前端编写代码->浏览器解析代码->呈现网页 谷歌浏览器Blink内核最好 2.Web标准 让网页设计排版更统一规范 结构&#xff1a;对网页元素进行整理和分类&#xff0c;html 表现&#xff1a;设置网页元素的板式、颜色、大小等外…

工作中总结的30个常用Linux指令,实在记不住就别硬记了,看这篇就够了

写在开头 最近发现自己记忆力严重下滑&#xff0c;很多sql命令&#xff0c;linux命令都记不住&#xff0c;特别是linux命令&#xff0c;很多命令参数很多&#xff0c;一段时间不用&#xff0c;再去使用就需要从网上重查了&#xff0c;很烦人&#xff0c;为此花了一些时间把之前…

初始化hive数据库问题记录

1、问题复现&#xff1a;完成了初始化hive数据库后没有看到生成的表格 2、检查后发现是NaviCat连接时主机号写错了&#xff0c;写成了localhost&#xff0c;这里修改为node01的主机号 3、修改后再次刷新就看到之前初始化后自动生成好的数据库表格了

C++之模板和可变模板参数

目录 一、为什么要定义模板 模板的优点: 二、模板的定义 三、模板的类型 3.1、函数模板 3.1.1、实例化&#xff1a;隐式实例化与显示实例化 3.1.2、函数模板、普通函数间的关系 3.1.2.1易错点: 3.1.2.2重载例子: 3.1.2.3优先级与执行顺序: 3.1.3、模板头文件与实现文…