第十四届蓝桥杯大赛软件赛省赛(Java 大学A组)

蓝桥杯 2023年省赛真题
Java 大学A组

 试题 A: 特殊日期
 试题 B: 与或异或
 试题  I: 高塔


把填空挂上跟大伙对对答案,然后 I \rm I I 题出的还行就先讲讲,剩下的最近有点忙,先放放。



试题 A: 特殊日期

本题总分5


【问题描述】

  记一个日期为 y y \small yy yy m m \small mm mm d d \small dd dd 日,统计从 2000 \small 2000 2000 1 \small 1 1 1 \small 1 1 日到 2000000 \small 2000000 2000000 1 \small 1 1 1 \small 1 1 日,有多少个日期满足年份 y y \small yy yy 是月份 m m \small mm mm 的倍数,同时也是 d d \small dd dd 的倍数。

【答案提交】

  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。


35813063


朴素解法


  考虑到以日为单位计量,时间段的阶并不大,因此直接使用java.time.LocalDate模拟日期变化,判断然后累加,程序在笔者 P C \small\rm PC PC 运行 15 \small15 15 秒后得到了答案。

import java.time.LocalDate;

public class Main {

    public static void main(String ...args) { new Main().run(); }

    LocalDate start = LocalDate.of(2000, 1, 1);
    LocalDate end = LocalDate.of(2000000, 1, 1);

    void run() {
        long ans = 0;
        for (LocalDate i = start; i.compareTo(end) <= 0; i = i.plusDays(1))
            if (i.getYear() % i.getMonthValue() == 0 
                    && i.getYear() % i.getDayOfMonth() == 0) ++ans;
        System.out.println(ans);
    }
}

倍数法


  设函数 f y ( x ) = { 1 x   ∣   y 0 o t h e r w i s e \small f_y(x) = \begin{cases} 1 & x\,|\,y\\ 0 & \rm otherwise \end{cases} fy(x)={10xyotherwise,对于正整数 y \small y y,记 d y \small d_y dy ∑ x = 1 31 f y ( x ) \sum_{x=1}^{31}\small f_y(x) x=131fy(x) m y \small m_y my ∑ x = 1 12 f y ( x ) \sum_{x=1}^{12}\small f_y(x) x=112fy(x),则在不考虑日期是否合法的情况下,答案为 ∑ y = 2000 2000000 − 1 d ⁡ y ⋅ m ⁡ y + 1 \sum_{y=2000}^{2000000 - 1}\small \operatorname{d}_y\cdot\operatorname{m}_y+1 y=200020000001dymy+1。因此我们用倍数法在线性时间复杂度意义下求出 d d d m m m,将答案拆分成若干合法部分累加,最后得到正确答案。

import java.util.function.IntPredicate;
import java.util.stream.IntStream;

public class Main {

    public static void main(String ...args) { new Main().run(); }

    void run() {
        System.out.println(
                calc(IntStream.rangeClosed(1, 12), IntStream.range(1, 29), y  -> true)
                + calc(IntStream.of(2), IntStream.of(29), y -> y % 100 == 0 ? (y % 400 == 0) : (y % 4 == 0))
                + calc(IntStream.iterate(1, m -> m == 1 ? 3 : m + 1).limit(11), IntStream.rangeClosed(29, 30), y  -> true)
                + calc(IntStream.of(1, 3, 5, 7, 8, 10, 12), IntStream.of(31), y  -> true)
                + 1
        );
    }

    final int start = 2000, end = 2000000;

    int calc(IntStream m, IntStream d, IntPredicate yf) {
        int[] my = new int[end + 1];
        int[] dy = new int[end + 1];
        m.forEach(
                a -> {
                    for (int i = 1; i * a <= end; ++i) ++my[i * a];
                }
        );
        d.forEach(
                a -> {
                    for (int i = 1; i * a <= end; ++i) ++dy[i * a];
                }
        );
        return IntStream.range(start, end).filter(yf).map(
                a -> my[a] * dy[a]
        ).sum();
    }
}

  帅是帅,但放在竞赛中性价比极低,编程多耗费时间都够你针对朴素解法的程序给出好几个测试用例了。



试题 B: 与或异或

本题总分5


【问题描述】

  小蓝有一张门电路的逻辑图,如下图所示 : :

请添加图片描述

  图中每个三角形代表着一种门电路,可能是与门、或门、异或门中的任何一种,它接受上一层中的两个圆形中的数据作为输入,产生一个输出值输出到下一级(如图中箭头所示)。图中圆形表示的是暂存的输出结果,取值只可能是 0 \small 0 0 1 \small 1 1,为了便于表示我们用 a r r [ i ] [ j ] \small arr[i][ j] arr[i][j] 表示第 i ( 0 ≤ i ≤ 4 ) \small i(0 ≤ i ≤ 4) i(0i4) 行第 j ( 0 ≤ j ≤ i ) \small j(0 ≤ j ≤ i) j(0ji) 个圆形的值。其中 a r r [ 0 ] = ( I n [ 0 ] , I n [ 1 ] , I n [ 2 ] , I n [ 3 ] , I n [ 4 ] ) \small arr[0] = (In[0], In[1], In[2], In[3], In[4]) arr[0]=(In[0],In[1],In[2],In[3],In[4]) 表示的是输入数据,对于某个 a r r [ i ] [ j ] ( i ≤ 0 ) \small arr[i][ j](i ≤ 0) arr[i][j](i0),计算方式为 a r r [ i ] [ j ] = a r r [ i − 1 ] [ j ]   o p   a r r [ i − 1 ] [ j + 1 ] \small arr[i][ j] = arr[i − 1][ j]\ op\ arr[i − 1][ j + 1] arr[i][j]=arr[i1][j] op arr[i1][j+1],其中 o p \small op op 表示的是将 a r r [ i − 1 ] [ j ] 、 a r r [ i − 1 ] [ j + 1 ] \small arr[i − 1][ j]、arr[i − 1][ j + 1] arr[i1][j]arr[i1][j+1] 作为输入,将 a r r [ i ] [ j ] \small arr[i][ j] arr[i][j] 作为输出的那个门电路,与门、或门、异或门分别对应于按位与 ( & ) \small (\&) (&)、按位或 (   ∣   ) \small (\:|\:) ()、按位异或 (   \small (\, (^   ) \small \,) ) 运算符。

  现在已知输入为 I n [ 0 ] = 1 , I n [ 1 ] = 0 , I n [ 2 ] = 1 , I n [ 3 ] = 0 , I n [ 4 ] = 1 \small In[0] = 1, In[1] = 0, In[2] = 1, In[3] = 0, In[4] = 1 In[0]=1,In[1]=0,In[2]=1,In[3]=0,In[4]=1,小蓝想要使得最终的输出 O u t \small Out Out 的值为 1 \small 1 1,请问一共有多少种不同的门电路组合方式?其中上图中显示的就是一种合法的方式。

【答案提交】

  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。


30528


深度优先搜索


  暴搜杯!我的青春回来了,开搜!

public class Main {

    public static void main(String ...args) { new Main().run(); }

    int[][] cir = new int[6][6];

    int ans = 0, target = 1;

    void run() {
        cir[5] = new int[]{ 0, 1, 0, 1, 0, 1 };
        dfs(1, 5);
        System.out.println(ans);
    }

    void dfs(int i, int n) {
        if (n <= 1) {
            if (cir[n][i] == target) ++ans;
        } else {
            if (i < n) {
                cir[n - 1][i] = cir[n][i] & cir[n][i + 1];
                dfs(i + 1, n);
                cir[n - 1][i] = cir[n][i] | cir[n][i + 1];
                dfs(i + 1, n);
                cir[n - 1][i] = cir[n][i] ^ cir[n][i + 1];
                dfs(i + 1, n);
            } else {
                dfs(1, n - 1);
            }
        }
    }
}


试题  I: 高塔

时间限制3.0s 内存限制512.0MB 本题总分25


【问题描述】

  小蓝正在玩一个攀登高塔的游戏。高塔的层数是无限的,但游戏最多只有 n \small n n 回合。

  小蓝一开始拥有 m \small m m 点能量,在每个回合都有一个值 A i \small A_i Ai 表示小蓝的角色状态。小蓝每回合可以选择消费任意点能量 C i \small C_i Ci (最低消费 1 \small 1 1 点,没有上限),他在这回合将最多可以向上攀爬 A i ⋅ C i \small A_i\cdot C_i AiCi 层。实际攀爬的层数取决于小蓝自己在这回合的表现,不过最差也会向上爬一层。

  当某回合小蓝的能量点数耗尽,那么在完成这个回合后,游戏结束。 n \small n n 回合结束后,不管能量还有没有剩余,游戏都会直接结束。

  给出小蓝每回合的 A i \small A_i Ai 和自己一开始的能量点数 m \small m m。小蓝想知道有多少种不同的可能出现的游玩过程。如果小蓝在两种游玩过程中的任一对应回合花费的能量点数不同或该回合结束时所处层数不同,那么这两种游玩过程就被视为不同。

【输入格式】

  输入的第一行包含两个整数 n , m \small n, m n,m,用一个空格分隔。

  第二行包含 n \small n n 个整数 A i \small A_i Ai,相邻整数之间使用一个空格分隔,表示小蓝每回合的状态值。

【输出格式】

  输出一行包含一个整数表示给定条件下不同游玩过程的数量。由于答案可能很大,你只需要输出答案对 998244353 \small 998244353 998244353 取模的结果

【样例输入】

9 15
3 2 5 7 1 4 6 8 3

【样例输出】

392149233

【评测用例规模与约定】

  对于 40 % \small 40\% 40% 的评测用例, n ≤ 300 , m ≤ 500 \small n ≤ 300,m ≤ 500 n300m500
  对于所有评测用例, 1 ≤ n ≤ 2 × 1 0 5 , n ≤ m ≤ 1 0 18 , 1 ≤ A i ≤ 1 0 9 \small 1 ≤ n ≤ 2 × 10^5,n ≤ m ≤ 10^{18},1 ≤ A_i ≤ 10^9 1n2×105nm10181Ai109


组合数学


  为了方便讨论,这里先给出一种小蓝在第 n n n 回合结束游戏的游玩过程数量的计算方法。依题意的,第 i i i 回合小蓝共消耗了 C i C_i Ci,共消耗了 n ≤ ∑ i = 1 n C i ≤ m n \leq\sum_{i=1}^nC_i\leq m ni=1nCim点能量,第 i i i 回合有 A i ⋅ C i A_i\cdot C_i AiCi 总不同的走法,故方案数为: ∑ c 1 , c 2 , ⋯ , c n > 0 c 1 + c 2 + ⋯ + c n ≤ m ∏ i = 1 n A i C i = ∑ c 1 , c 2 , ⋯ , c n > 0 c 1 + c 2 + ⋯ + c n ≤ m ∏ i = 1 n C i ⋅ ∏ i = 1 n A i . \sum_{\substack{c_1,c_2,\cdots,c_n > 0\\c_1+c_2+\cdots+c_n\leq m}}\prod_{i=1}^nA_iC_i=\sum_{\substack{c_1,c_2,\cdots,c_n > 0\\c_1+c_2+\cdots+c_n\leq m}}\prod_{i=1}^nC_i\cdot\prod_{i=1}^nA_i. c1,c2,,cn>0c1+c2++cnmi=1nAiCi=c1,c2,,cn>0c1+c2++cnmi=1nCii=1nAi.  记 p ( n , m ) p(n,m) p(n,m) ∑ c 1 , c 2 , ⋯ , c n > 0 c 1 + c 2 + ⋯ + c n ≤ m ∏ i = 1 n C i \sum_{\substack{c_1,c_2,\cdots,c_n > 0\\c_1+c_2+\cdots+c_n\leq m}}\prod_{i=1}^nC_i c1,c2,,cn>0c1+c2++cnmi=1nCi。因为在小于 n n n 的回合结束要耗尽能量,所以整理可以知最终答案为: p ( n , m ) ∏ i = 1 n A i + ∑ j = 1 n − 1 ( p ( j , m ) − p ( j , m − 1 ) ) ∏ i = 1 j A i . p(n,m)\prod_{i=1}^nA_i+\sum_{j=1}^{n-1}(p(j,m) -p(j,m-1))\prod_{i=1}^jA_i. p(n,m)i=1nAi+j=1n1(p(j,m)p(j,m1))i=1jAi.  因此该思路下, p ( n , m ) p(n,m) p(n,m) 求解的复杂度与整体直接关联,考虑 p p p 的边界情况,当 n = 1 n=1 n=1 时, p ( 1 , m ) = 1 + 2 + ⋯ + m = m ( m + 1 ) 2 p(1,m) = 1+2+\cdots+m=\cfrac {m(m+1)}2 p(1,m)=1+2++m=2m(m+1)。考虑 n + 1 n+1 n+1 情况,枚举 C n + 1 C_{n+1} Cn+1 可能的取值 1 , 2 , ⋯ m − n 1,2,\cdots m-n 1,2,mn,则有递推式: p ( n , m ) = { 1 + 2 + ⋯ + m n = 1 ∑ i = 1 m − n + 1 i p ( i − 1 , m − i ) 1 < n ≤ m . p(n,m) = \begin{cases} 1+2+\cdots+m &n=1 \\ \sum_{i=1}^{m-n+1} ip(i-1,m-i) &1< n\leq m \end{cases}. p(n,m)={1+2++mi=1mn+1ip(i1,mi)n=11<nm.  观察到 p ( 1 , m ) = m ( m + 1 ) 2 = C m + 1 2 p(1,m)=\cfrac {m(m+1)}2=C_{m+1}^2 p(1,m)=2m(m+1)=Cm+12,有 p ( 2 , m ) = C m 2 + 2 C m − 1 2 + ⋯ + ( m − 1 ) C 2 2 = ( C m 2 + C m − 1 2 + ⋯ + C 2 2 ) + ( C m − 1 2 + C m − 2 2 + ⋯ + C 2 2 ) + ⋯ C 2 2 = C m + 1 3 + C m 3 + ⋯ + C 3 3 = C m + 2 4 . \begin{split} p(2,m)&=C_{m}^2+2C_{m-1}^2+\cdots+(m-1)C_{2}^2\\ &=(C_{m}^2+C_{m-1}^2+\cdots+C_{2}^2)+(C_{m-1}^2+C_{m-2}^2+\cdots+C_{2}^2)+\cdots C_{2}^2\\ &=C_{m+1}^3+C_{m}^3+\cdots+C_{3}^3\\ &=C_{m+2}^4 \end{split}. p(2,m)=Cm2+2Cm12++(m1)C22=(Cm2+Cm12++C22)+(Cm12+Cm22++C22)+C22=Cm+13+Cm3++C33=Cm+24.  类似的,可得关系式 p ( n , m ) = C n + m 2 n p(n,m)=C_{n+m}^{2n} p(n,m)=Cn+m2n,故最终答案为: C n + m 2 n ∏ i = 1 n A i + ∑ j = 1 n − 1 ( C j + m 2 j − C j + m − 1 2 j ) ∏ i = 1 j A i . C_{n+m}^{2n}\prod_{i=1}^nA_i+\sum_{j=1}^{n-1}(C_{j+m}^{2j}-C_{j+m-1}^{2j})\prod_{i=1}^jA_i. Cn+m2ni=1nAi+j=1n1(Cj+m2jCj+m12j)i=1jAi.  不对 p p p 做优化的情况下时间复杂度为 O ( n 2 log ⁡ m ) O(n^2\log m) O(n2logm),因此 p p p 的值还需迭代计算,最终复杂度为 O ( n log ⁡ m ) O(n\log m) O(nlogm)。此外,在杨辉三角中我们也可以看到 p ( n , m ) 、 p ( n − 1 , m − 1 ) 、 p ( n − 1 , n − 1 ) p(n,m)、p(n-1,m-1)、p(n-1,n-1) p(n,m)p(n1,m1)p(n1,n1) 恰围成一个菱形,什么数形结合。

先睡觉

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

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

相关文章

PMP课堂模拟题目及解析(第5期)

41. 项目的混凝土供应商通知项目经理&#xff0c;材料将比预定时间晚三个星期交付。项目经理更新了进度计划并通知项目团队。在这种情况下&#xff0c;哪种合同类型承担的风 险最小&#xff1f; A. 总价加激励费用合同。 B. 总价加经济价格调整合同。 C. 工料合同。 D. 固…

利用阿里云免费部署openai的Chatgpt国内直接用

背景 国内无法直接访问ChatGPT&#xff0c;一访问就显示 code 1020。而且最近OpenAI查的比较严格&#xff0c;开始大规模对亚洲地区开始封号&#xff0c;对于经常乱跳IP的、同一个ip一堆账号的、之前淘宝机刷账号的&#xff0c;账号被封的可能性极大。 那么有没有符合openai规定…

PLC与无线开关量测控终端之间Modbus通信实例

本方案是基于Modbus RTU协议下实现的1主多从自组网无线通信形式&#xff0c;主站为S7-1200 PLC&#xff0c;DTD433H作为从站。DTD433H具备输入和输出开关量信号功能&#xff0c;信号传输方向由用户原系统主从设备所实现的功能决定。方案中采用无线开关量信号测控终端DTD433H与欧…

NC – 靶向特定功能的神经元细胞类型治疗脑部疾病

神经元是大脑的主要功能单位。这些细胞中传递的信号——以电波的形式——导致所有思维、感觉、运动、记忆和情感。 塞达斯-西奈医学中心的研究人员利用计算机模型来弥合“试管”神经元数据和这些细胞在大脑中的功能之间的差距。他们的研究有助于开发靶向特定功能的神经元类型治…

迅为国产化RK3588开发平台16G大内存64G存储2路千兆以太网4G/5G通信

iTOP-3588开发板采用瑞芯微RK3588处理器&#xff0c;是全新一代AloT高端应用芯片采用8nmLP制程&#xff0c;搭载八核64位CPU(四核Cortex-A76四核Cortex-A55架构)集成MaliG610MP4四核GPU&#xff0c;内置AI加速器NPU&#xff0c;算力达6Tops&#xff0c;集成独立的8K视频硬件编码…

HTML-CSS学习笔记

day1-01.CSS的元素显示模式 元素的显示模式就是元素&#xff08;标签&#xff09;以什么方式进行展示&#xff0c;比如<div>自己占一行&#xff0c;<span>一行可以放多个。 HTML元素一般分为块元素和行内元素两种类型。 块元素 如果在p标签中放了div标签&#xff…

企业邮箱选购,需关注哪些重要因素?

企业邮箱选择考虑哪些问题&#xff1f;应该从企业邮箱安全、企业邮箱的稳定性、企业邮箱专业、方便迁移到新的企业邮箱、企业邮箱邮件的到达率、功能强大的企业邮箱、企业邮箱手机客户端设置等方面考虑。 1.企业邮箱安全 企业邮箱应考虑病毒防治能力。Zoho Mail企业邮箱从物理安…

【LeetCode困难】1263. 推箱子

「推箱子」是一款风靡全球的益智小游戏&#xff0c;玩家需要将箱子推到仓库中的目标位置。 游戏地图用大小为 m x n 的网格 grid 表示&#xff0c;其中每个元素可以是墙、地板或者是箱子。 现在你将作为玩家参与游戏&#xff0c;按规则将箱子 ‘B’ 移动到目标位置 ‘T’ &am…

创新指南|5大策略让创新业务扩张最大避免“增长痛苦”

公司在开发和孵化新业务计划方面进行了大量投资&#xff0c;但很少有公司遵循严格的途径来扩大新业务规模。虽然80%的公司声称构思和孵化新企业&#xff0c;但只有16%的公司成功扩大了规模。典型案例是百思买在许多失败倒闭的扩大新业务取得了成功。它经历了建立新业务所需的3个…

手残也不该敲的命令

Linux命令是一种很有趣且有用的东西&#xff0c;但在你不知道会带来什么后果的时候&#xff0c;它又会显得非常危险。所以&#xff0c;在输入某些命令前&#xff0c;请多多检查再敲回车。 rm –rf rm –rf是删除文件夹和里面附带内容的一种最快捷的方法&#xff0c;但是细微的…

深度学习03-卷积神经网络(CNN)

简介 CNN&#xff0c;即卷积神经网络&#xff08;Convolutional Neural Network&#xff09;&#xff0c;是一种常用于图像和视频处理的深度学习模型。与传统神经网络相比&#xff0c;CNN 有着更好的处理图像和序列数据的能力&#xff0c;因为它能够自动学习图像中的特征&…

安全防线再升级 | 中睿天下全流量安全分析系统重磅回归

随着信息化的加速&#xff0c;企业网络日趋完善。企业数字化的加速&#xff0c;让越来越多的关键业务运行在计算机网络基础之上&#xff0c;越来越多的重要信息通过网络传送&#xff0c;企业网络面临日益严重的安全威胁&#xff0c;这些安全威胁以窃取信息和收集情报为主&#…

中文润色神器-中文润色软件

中文写作润色软件 中文写作润色软件是一种基于自然语言处理技术和人工智能算法的工具&#xff0c;旨在提高中文文本的语言风格、表达能力和可读性。它可以自动检测文本中出现的语法、拼写、标点符号等语言问题&#xff0c;并给出相应的修正和修改建议。 中文写作润色软件的主…

Spark 从入门到精通

Spark 从入门到精通 环境搭建 准备工作 创建安装目录 mkdir /opt/soft cd /opt/soft下载scala wget https://downloads.lightbend.com/scala/2.13.10/scala-2.13.10.tgz -P /opt/soft解压scala tar -zxvf scala-2.13.10.tgz修改scala目录名称 mv scala-2.13.10 scala-2下…

进程(二)

进程二 2.6 调度的概念、层次2.6.1 基本概念2.6.2 三个层次2.6.3 三层调度的联系、对比2.6.4 补充知识2.6.5 本小节总结 2.7 进程调度的时机、切换与过程、方式2.7.1 进程调度的时机2.7.2 切换与过程2.7.3 进程调度的方式2.7.4 总结 2.8 调度器/调度程序/闲逛线程2.9 调度算法的…

Python基础入门编程代码练习(六)

一、模拟房产经纪人来管理房屋信息 编写业务实现 家具类&#xff1a;HouseItem 属性&#xff1a;名字 name&#xff0c;占地面积 area 方法&#xff1a;__init__ , __str__ 类名&#xff1a;房子类 House 属性&#xff1a;户型 name&#xff0c;总面积&#xff1a;total_are…

Word怎么分页,提高效率就靠这3种方法!

案例&#xff1a;Word怎么分页 【文档要进行分页处理&#xff0c;但是我尝试了好多次还是不行&#xff01;大家知道Word怎么分页吗&#xff1f;】 在使用Microsoft Word处理文档时&#xff0c;我们常常需要进行分页操作。Word的分页功能可以将文档分成多个页面&#xff0c;以…

【Selenium上】——全栈开发——如桃花来

目录索引 Selenium是什么&#xff1a;下载和配置环境变量&#xff1a;1. 基本使用&#xff1a;导入五个常用包&#xff1a;基本代码&#xff1a; 实例引入&#xff1a;声明不同浏览器对象&#xff1a;访问页面&#xff1a; Selenium是什么&#xff1a; Selenium是一个用于Web应…

怎么把pdf中的某一页分出来?

怎么把pdf中的某一页分出来&#xff1f;PDF格式的文档在日常生活中是非常常见的&#xff0c;相信大家都对其有所了解&#xff0c;并且经常使用。它的主要特点是不允许用户随意编辑其中的内容&#xff0c;当我们仅需要阅读时&#xff0c;PDF文档无疑是十分方便的&#xff0c;尤其…

Python爬虫解读

爬虫&#xff1a; Python爬虫是指利用计算机程序或者脚本自动抓取网站数据的一种行为&#xff0c;通常是为了提取网站数据或者进行数据分析等目的。 Python 爬虫可以分为手动爬虫和自动爬虫两种。手动爬虫是指完全由人工编写代码来实现的爬虫&#xff0c;这种方式需要编写大量的…