2023年蓝桥杯省赛——数组分割

news2024/11/15 11:08:00

目录

题目链接:1.数组分割 - 蓝桥云课 (lanqiao.cn)

思路

数学问题解答

思路

代码实现

总结


 

 

题目链接:1.数组分割 - 蓝桥云课 (lanqiao.cn)

思路

        众所周知,蓝桥杯又叫,数学杯,这道题其实就是一个数学问题,当你发现这是一个数学问题,你只需要解出这个数学题,发现公式,然后使用代码实现它就可以了。当然了,你看他提示了答案结果比较大,要对1000000007取模,一看long型就装不下,这时候就要想一些其他的奇奇怪怪的不会精度溢出的操作了,我这里使用的是BigInteger。

数学问题解答

如果我问你:

        我现在会给你一串数字大于等于零,有奇数有偶数,我现在每次抽取一个子集为s1,s2为补集,那么我现在需要s1和s2中的数分别加和都为偶数(s1中数加起来是偶数,s2中数加起来也是偶数),请问这种s1类型有多少种?

如果你的回答是:

        那么恭喜你,你已经写出来这道题了

       偶数的数量总是可以任意地在s1和s2之间移动,因为偶数无论是相加还是相减,结果总是偶数。所以我们只需要考虑奇数的情况。

        当奇数的数量为偶数时,我们可以将它们均匀地分到s1和s2中,总能得到两个和为偶数的集合。当奇数的数量为奇数时,无论如何都不能将它们分成两个和都为偶数的集合。因此,子集的数量取决于奇数的数量。

假设有n个偶数和m个奇数,那么,不同s1的数量是:

  • 当m为0时(没有奇数),结果是2^n(每个偶数都可以选择是在s1内或者s2内,所以有2^n种可能)。
  • 当m为偶数时(奇数的数量为偶数),结果是2^(n + m - 1)(偶数和奇数都可以任意选择是否在s1内,但至少有一个奇数不能在s1内,因此是减去1)。
  • 当m为奇数时(奇数数量为奇数),没有满足条件的s1,结果是0。

分析完毕!

是不是很easy

思路

        这段代码的主要目的是解决一个问题,即在给定的数组中找出满足所有的子集,这些子集的偶数和奇数的总和都是偶数。

        在主函数main()中,它首先需要读取测试用例的数量(T)。

        在每个测试用例中,我们先读取数组的长度(Alen),然后我们定义一个数组arr[]来存储所有的元素。

        调用了一个名为getResult的函数,获取集合数量并打印出结果。

        函数getResult中,统计了奇数和偶数的数量,如果奇数的数量不是偶数,那么就返回0,因为无法形成和为偶数的集合。

        如果奇数的数量是偶数,或者没有奇数,那么返回的结果就是2的n次方,n为数组长度,在这种情况下,因为偶数的和是偶数,所以,我们可以任意组合偶数,形成可以各种可能的子集。

        此外,当奇数的数量为偶数时,结果为2的n-1次方,有一个奇数必须要与一个偶数配对生成一个偶数,所以减一。

        最后,使用了BigInteger类来处理可能非常大的数,mod(nmod)是为了防止结果过大,对结果进行了模1000000007的操作。

代码实现

import java.util.Scanner;
import java.math.*;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {

  	
	  public static BigInteger nbas = new BigInteger("2");
	  public static BigInteger nmod = new BigInteger("1000000007");

    public static void main(String[] args){ 
    	Scanner scanner = new Scanner(System.in);
    	// 外层循环执行T次
    	int T = scanner.nextInt();
    	
    	// 统计奇数的个数,只有奇数的个数是偶数个的时候s1和s2才可以都是偶数
    	for (int i = 0; i < T; i++) {
			// 数组长度
    		int Alen = scanner.nextInt();
    		// new一个数组
    		int[] arr = new int[Alen];
    		// 将数据写入数组
    		for (int j = 0; j < Alen; j++) {
				arr[j] = scanner.nextInt();
			}
    		System.out.println(getResult(arr, Alen));
		}

    }
    
    public static BigInteger getResult(int[] arr, int Alen) {
		// 先统计一波奇数和偶数的个数
    	int ji = 0;
    	int ou = 0;
    	for (int i = 0; i < Alen; i++) {
			if (arr[i] % 2 == 0) {
				// 偶数
				ou++;
			}else {
				// 奇数
				ji++;
			}
		}
    	// 判断奇数是偶数个还是奇数个
    	// 如果奇数是奇数个就完了
    	// 如果是偶数个就拿下了
    	if (ji % 2 != 0) {
			// 奇数不是偶数个
    		return new BigInteger("0");
		}
    	
    	
    	// 不是偶数个
    	// 如果没有奇数,那么答案就是2^n,n是Alen也就是数组的长度
    	if (ji == 0) {
			return nbas.pow(Alen).mod(nmod);
		}else {
			return nbas.pow(Alen - 1).mod(nmod);
		}
	}
}

总结

        这道题总体来说就是一道数学问题的解答,然后将这个数学问题转化为代码实现就可以了。总体来说这里的难点就是这个数学问题的排列组合问题,其实如果你发现不了这个数学逻辑的答案,也可以使用DFS给他搜索出来。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web应用防火墙是什么?分享工作原理及部署建议

Web应用防火墙&#xff08;WAF&#xff09;诞生于互联网的早期时间&#xff0c;它通常会感知用户、会话和应用&#xff0c;了解其背后的Web应用及其提供的服务。正因如此&#xff0c;WAF可以看作是用户和应用之间的中介&#xff0c;并会提前对往来于两者之前的通信进行分析。那…

matlab实现神经网络检测手写数字

一、要求 1.计算sigmoid函数的梯度&#xff1b; 2&#xff0e;随机初始化网络权重&#xff1b; 3.编写网络的代价函数。 二、算法介绍 神经网络结构&#xff1a; 不正则化的神经网络的代价函数&#xff1a; 正则化&#xff1a; S型函数求导&#xff1a; 反向传播算法&…

蓝桥杯2023年第十四届省赛真题-买瓜|DFS+剪枝

题目链接&#xff1a; 0买瓜 - 蓝桥云课 (lanqiao.cn) 蓝桥杯2023年第十四届省赛真题-买瓜 - C语言网 (dotcpp.com) &#xff08;蓝桥官网的数据要求会高一些&#xff09; 说明&#xff1a; 这道题可以分析出&#xff1a;对一个瓜有三种选择&#xff1a; 不拿&#xff0c…

C语言笔记:重学输入和输出

ACM金牌带你零基础直达C语言精通-课程资料 本笔记属于船说系列课程之一&#xff0c;课程链接&#xff1a;ACM金牌带你零基础直达C语言精通https://www.bilibili.com/cheese/play/ep159068?csourceprivate_space_class_null&spm_id_from333.999.0.0 你也可以选择购买『船说…

AI论文速读 | 具有时间动态的路网语义增强表示学习

论文标题&#xff1a; Semantic-Enhanced Representation Learning for Road Networks with Temporal Dynamics 作者&#xff1a; Yile Chen&#xff08;陈亦乐&#xff09; ; Xiucheng Li&#xff08;李修成&#xff09;; Gao Cong&#xff08;丛高&#xff09; ; Zhifeng Ba…

深入探讨iOS开发:从创建第一个iOS程序到纯代码实现全面解析

iOS开发作为移动应用开发的重要领域之一&#xff0c;对于开发人员具有重要意义。本文将深入探讨iOS开发的各个方面&#xff0c;从创建第一个iOS程序到纯代码实现iOS开发&#xff0c;带领读者全面了解iOS应用程序的开发流程和技术要点。 &#x1f4f1; 第一个iOS程序 在创建第…

第1章 实时3D渲染流水线

前言 本书所剖析的Unity 3D内置着色器代码版本是2017.2.0f3&#xff0c;读者可以从Unity 3D官网下载这些着色器代码。这些代码以名为builtin_shaders-2017.2.0f3.zip的压缩包的形式提供&#xff0c;解压缩后&#xff0c;内有4个目录和1个license.txt文件。 目录CGIncludes存放了…

【系统架构师】-基础知识整理

1、面向对象设计得四种关系 关系类型概念特点例子关联关系表示不同类的对象之间有联系&#xff0c;但是一方并不完全拥有另一方&#xff0c;也不对其生命周期负责。关联关系可以是单向的也可以是双向的。耦合度高通常用来表示不同类的对象之间的联系&#xff0c;如“使用”或“…

Kafka消费者:监听模式VS主动拉取,哪种更适合你?

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Kafka消费者&#xff1a;监听模式VS主动拉取&#xff0c;哪种更适合你&#xff1f; 前言监听模式的实现监听器&#xff08;Listener&#xff09;的概念和作用使用监听器实现 Kafka 消费者的步骤和方法…

DDoS攻击升级,解读防御DDoS攻击的几大有效方法

前不久&#xff0c;Gcore发布了2023年第三、四季度DDoS攻击趋势报告&#xff0c;报告中指出DDoS攻击的规模以及复杂性持续增长&#xff0c;且这种增长是触目惊心的。全球每天大约发生23000次DDoS攻击&#xff0c;每39秒就会发生一次新的网络攻击&#xff0c;电信公司、政府部门…

javaSwing连连看游戏

一、简介 基于java的连连看游戏设计和实现&#xff0c;基本功能包括&#xff1a;消除模块&#xff0c;重新开始模块&#xff0c;刷新模块&#xff0c;选择难度模块&#xff0c;计时模块。本系统结构如下&#xff1a; &#xff08;1&#xff09;消除模块&#xff1a; 完成连连…

【MATLAB源码-第13期】基于matlab的4ASK的误码率BER和误符号率SER理论和实际对比仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 "4ASK" 是一种数字调制技术&#xff0c;代表4级振幅移移键控&#xff08;4-Level Amplitude Shift Keying&#xff09;调制。它是一种数字通信中常用的调制方式之一&#xff0c;用于将数字信号转换为模拟信号以便传…

map china not exists. the geojson of the map must be provided.

map china not exists. the geojson of the map must be provided. 场景&#xff1a;引入echarts地图报错map china not exists. the geojson of the map must be provided. 原因&#xff1a; echarts版本过高&#xff0c;ECharts 之前提供下载的矢量地图数据来自第三方&…

小白学视觉 | 图像上的 OpenCV 算术运算

本文来源公众号“小白学视觉”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;图像上的 OpenCV 算术运算 1 OpenCV 简介 图像可以进行算术运算&#xff0c;例如加法、减法和按位运算&#xff08;AND、OR、NOT、XOR&#xff09;。…

模拟器App抓包 - 证书双向验证绕过手段

希望和各位大佬一起学习&#xff0c;如果文章内容有错请多多指正&#xff0c;谢谢&#xff01; 个人博客链接&#xff1a;CH4SER的个人BLOG – Welcome To Ch4sers Blog 0x00 Frida 环境配置 1. 本地安装 Frida pip install frida pip install frida-tools2. 模拟器安装 Fr…

【详细讲解yarn的安装和使用】

&#x1f308;个人主页:程序员不想敲代码啊&#x1f308; &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家&#x1f3c6; &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提…

leetcode 15.三数之和 JAVA 双指针法

题目 思路 双指针法 去重 为啥要去重呢&#xff1f;因为题目中说了要返回不重复的三元组。拿示例1来看&#xff0c;&#xff08;-1&#xff0c;0&#xff0c;1&#xff09;和&#xff08;0&#xff0c;1&#xff0c;-1&#xff09;虽然都等于0&#xff0c;但其实它们里面的数…

Unix环境高级编程-学习-08-自旋锁与屏障

目录 一、多线程相关文章链接 二、自由抒发 1、自旋锁 2、屏障 三、函数介绍 1、pthread_spin_init &#xff08;1&#xff09;声明 &#xff08;2&#xff09;作用 &#xff08;3&#xff09;参数 &#xff08;4&#xff09;返回值 &#xff08;5&#xff09;注意点 …

c语言文件操作(下)

目录 1.文件的随机读写1.1 fseek1.2 ftell1.3 rewind 2. 文件结束的判定2.1 文本文件读取结束的判断2.2 二进制文件读取结束的判断 3. 文件缓冲区 1.文件的随机读写 1.1 fseek 根据⽂件指针的位置和偏移量来定位⽂件指针。 函数原型&#xff1a; int fseek (FILE * stream,…

Python篇之网络编程,实现简单的服务端和客户端的内容传输

本小节内容&#xff1a;实现简单的信息交流 文章目录 一、 Socket介绍二、客户端与服务端三、在python中实现网络通信1. 服务端2. 客户端3. 连接测试 一、 Socket介绍 socket (简称 套接字) 模块是其内置的标准库之一&#xff0c;它实现了BSD sockets API&#xff0c;允许开发…