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

本文介绍了2023年蓝桥杯省赛编程竞赛的部分试题,包括求和、分糖果、三国游、平均、填充、棋盘、子矩阵、公因数匹配和异或和之差等问题,涉及到了多种算法思想,如贪心、动态规划和区间最值计算等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


  开胃小菜。


试题 A: 求和

本题总分: 5 5 5


【问题描述】

  求 1 1 1 (含)至 20230408 20230408 20230408 (含)中每个数的和。

【答案提交】

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


204634714038436


自然数列求和, 1 + 2 + ⋯ + n = n ( n + 1 ) 2 1+2+\cdots+n=\cfrac {n(n+1)}2 1+2++n=2n(n+1)

public class Main {
   

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

    void run() {
   
        System.out.println(
                20230408 * (20230408 + 1l) / 2
        );
    }
}

或者迭代答案。

public class Main {
   

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

    void run() {
   
        long ans = 0;
        for (int i = 1; i <= 20230408; ++i)
            ans += i;
        System.out.println(ans);
    }
}

试题 B: 分糖果

本题总分: 5 5 5


【问题描述】

  两种糖果分别有 9 9 9 个和 16 16 16 个,要全部分给 7 7 7 个小朋友,每个小朋友得到的糖果总数最少为 2 2 2 个最多为 5 5 5 个,问有多少种不同的分法。
  只要有其中一个小朋友在两种方案中分到的糖果不完全相同,这两种方案就算作不同的方案。

【答案提交】

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


5067671


观察到两种糖果组成二至五个的方案为 3 + 4 + 5 + 6 = 18 3+4+5+6=18 3+4+5+6=18 种,以该方案为蓝本枚举 7 7 7 个小朋友构成的总分配方案一共有 1 8 7 18^7 187 种,时间复杂度显然不理想,于是考虑枝剪。
一个可以观察到的上界是 C 15 6 C 22 6 ≈ 3.7 e 8 C_{15}^6C_{22}^6\approx 3.7e8 C156C2263.7e8,因为一个自然数 n n n 被拆分成 k k k 个非负整数根据插板法共有 C n + k − 1 k − 1 C_{n +k - 1}^{k-1} Cn+k1k1 种方案。

public class Main {
   

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

    int n = 7, c1 = 9, c2 = 16, l = 2, r = 5;

    long ans = 0;

    void dfs(int depth) {
   
        if (depth == n) {
   
            if (c1 == 0 && c2 == 0) ++ans;
        } else {
   
            for (int i = l; i <= r; ++i)
                for (int k = 0, g = i; k <= i; ++k, --g) {
   
                    if (c1 < k || c2 < g) continue;
                    c1 -= k;
                    c2 -= g;
                    dfs(depth + 1);
                    c1 += k;
                    c2 += g;
                }
        }
    }

    void run() {
   
        dfs(0);
        System.out.println(ans);
    }
}

试题 C: 三国游

时间限制: 3.0 s 3.0\mathrm s 3.0s 内存限制: 512.0 M B 512.0\mathrm{MB} 512.0MB 本题总分: 10 10 10


【问题描述】

  小蓝正在玩一款游戏。游戏中魏蜀吴三个国家各自拥有一定数量的士兵 X , Y , Z X, Y, Z X,Y,Z (一开始可以认为都为 0 0 0 )。游戏有 n n n 个可能会发生的事件,每个事件之间相互独立且最多只会发生一次,当第 i i i 个事件发生时会分别让 X , Y , Z X, Y, Z X,Y,Z 增加 A i , B i , C i A_i, B_i,C_i Ai,Bi,Ci
  当游戏结束时 (所有事件的发生与否已经确定),如果 X , Y , Z X, Y, Z X,Y,Z 的其中一个大于另外两个之和,我们认为其获胜。例如,当 X > Y + Z X > Y + Z X>Y+Z 时,我们认为魏国获胜。小蓝想知道游戏结束时如果有其中一个国家获胜,最多发生了多少个事件?
  如果不存在任何能让某国获胜的情况,请输出 − 1 −1 1

【输入格式】

  输入的第一行包含一个整数 n n n
  第二行包含 n n n 个整数表示 A i A_i Ai,相邻整数之间使用一个空格分隔。
  第三行包含 n n n 个整数表示 B i B_i Bi,相邻整数之间使用一个空格分隔。
  第四行包含 n n n 个整数表示 C i C_i Ci,相邻整数之间使用一个空格分隔。

【输出格式】

  输出一行包含一个整数表示答案。

【样例输入】

3
1 2 2
2 3 2
1 0 7

【样例输出】

2

【样例说明】

  发生两个事件时,有两种不同的情况会出现获胜方。
  发生 1 , 2 1, 2 1,2 事件时蜀国获胜。
  发生 1 , 3 1, 3 1,3 事件时吴国获胜。

【评测用例规模与约定】

  对于 40 % 40\% 40% 的评测用例, n ≤ 500 n ≤ 500 n500
  对于 70 % 70\% 70% 的评测用例, n ≤ 5000 n ≤ 5000 n5000
  对于所有评测用例, 1 ≤ n ≤ 1 0 5 , 1 ≤ A i , B i , C i ≤ 1 0 9 1 ≤ n ≤ 10^5,1 ≤ A_i, B_i,C_i ≤ 10^9 1n1051Ai,Bi,Ci109


贪心


同时考虑三个国家是相当困难的,于是考虑分别求出魏蜀吴分别获胜的话最大事件数,最优答案就是这若干个数中的最大值。
以魏举例,记第 i i i 个事件对魏获胜的贡献为 x i − y i − z i x_i -y_i -z_i xiyizi,按贡献降序重排事件,找到一个 k k k,满足 ∑ i = 1 k x i > ∑ i = 1 k ( y i + z i ) \sum_{i=1}^kx_i >\sum_{i=1}^k(y_i + z_i) i=1kxi>i=1k(yi+zi) k k k 尽可能大,若 k < n k < n k<n,易知 ∑ i = 1 k + 1 x i ≤ ∑ i = 1 k + 1 ( y i + z i ) \sum_{i=1}^{k+1}x_i \leq\sum_{i=1}^{k+1}(y_i + z_i) i=1k+1xii=1k+1(yi+zi) [ 1 , k ] [1,k] [1,k] 间的或 ( k , n ] (k,n] (k,n] 间的事件交换不会对和式值造成影响, [ 1 , k ] [1,k] [1,k] 间与 ( k , n ] (k,n] (k,n] 间的元素交换会使 ∑ i = 1 k + 1 ( x i − y i − z i ) \sum_{i=1}^{k+1}(x_i-y_i - z_i) i=1k+1(x

### 第十四届蓝桥杯大赛 Java 研究生详情 #### 比概述 第十四届蓝桥杯全国软件和信息技术专业人才大赛旨在推动软件开发技术的发展,培养大学生的创新思维和实践能力。该事面向全国高校在校学生开放,分为多个竞类别和技术方向。 #### 参对象 比主要针对计算机科学及相关专业的研究生群体。参者需具备扎实的编程基础以及解决实际问题的能力。 #### 制安排 - **报名阶段**:通常提前几个月启动,在线注册并提交个人信息完成报名流程。 - **初级选拔)**:采用在线答题形式,考察选手的基础理论知识与算法设计水平。题目难度适中,覆盖广泛的知识点,包括但不限于数据结构、算法分析等[^1]。 ```java // 示例代码展示如何处理数求和问题 public class ArraySum { public static int sumRange(int[] array, int L, int R) { int sum = 0; for (int i = L; i <= R && i < array.length; i++) { sum += array[i]; } return sum; } public static void main(String[] args) { int[] A = {1, 2, 3, 4, 5}; System.out.println(sumRange(A, 1, 3)); // 输出9 } } ``` - **决准备**:晋级选手将进入更深入的技术挑战环节,可能涉及复杂的数据结构操作、高级算法应用等内容。 - **总决**:线下举行,邀请各区优秀代表参与终极对决,争夺全国奖项。 #### 奖项设置 根据成绩排名颁发不同等级的荣誉证书及奖品,鼓励更多年轻人投身于科技创新领域。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值