第十三届蓝桥杯大赛软件赛省赛(Java 大学A组)
Posted 肖有量
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第十三届蓝桥杯大赛软件赛省赛(Java 大学A组)相关的知识,希望对你有一定的参考价值。
蓝桥杯 2022年省赛真题
Java 大学A组
- 试题 A: 裁纸刀
- 试题 B: 寻找整数
- 试题 C: 求和
- 试题 D: GCD
- 试题 E: 蜂巢
- 试题 F: 全排列的价值
- 试题 G: 青蛙过河
- 试题 H: 因数平方和
- 试题 I: 最优清零方案
- 试题 J: 推导部分和
小做一会 J A \\mathrmJA JA 打发时间。
试题 A: 裁纸刀
本题总分: 5 5 5 分
【问题描述】
小蓝有一个裁纸刀,每次可以将一张纸沿一条直线裁成两半。
小蓝用一张纸打印出两行三列共 6 6 6 个二维码,至少使用九次裁出来,下图给出了一种裁法。
在上面的例子中,小蓝的打印机没办法打印到边缘,所以边缘至少要裁
4
4
4 次。另外,小蓝每次只能裁一张纸,不能重叠或者拼起来裁。
如果小蓝要用一张纸打印出 20 20 20 行 22 22 22 列共 440 440 440 个二维码,他至少需要裁多少次?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
443
我们可以仿照两行三列时,题目给出的切分法,写出一个递归程序去计算它的切割次数,
题目给出的方法可以抽象为两部分,
1
、
1、
1、边缘裁剪
4
4
4 次。
2
、
2、
2、选择当前纸片中连接二维码数量最多的一条线,沿其切割,分割成两个小纸片,重复此步直至纸片的某行或某列为
1
1
1。
public class Test
public static void main(String[] args) System.out.println(calc(20, 22) + 4);
static int calc(int row, int col)
if (row > col) return calc(col, row);
if (col == 1) return row - 1;
if (row == 1) return col - 1;
if (row % 2 == 0) return 2 * calc(row / 2, col) + 1;
return calc(1, col) + 2 * calc(row / 2, col) + 2;
当然这种方式并非绝对最优,一种较为稳妥的方式是在记忆化处理下暴搜,不过总所周知,记忆化搜索是状压 d p \\mathrmdp dp 的递归实现,由此,我们可以在状态转移方程上研究出最优方案之间的共性,
设状态 f i , j f_i,j fi,j 为 i i i 行 j j j 列的纸片在最优裁剪方案下的步骤数,显然有 f i , j = f j , i f_i,j = f_j,i fi,j=fj,i、 f i , 1 = i − 1 f_i,1 = i-1 fi,1=i−1、 f i , j = min f i ′ , j + f i − i ′ , j , f i , j ′ + f i , j − j ′ + 1 ∣ 1 ≤ i ′ < i , 1 ≤ j ′ < j f_i,j=\\min\\f_i',j+f_i-i',j,f_i,j' +f_i,j-j'\\+1|1\\leq i' < i,1\\leq j' < j fi,j=minfi′,j+fi−i′,j,fi,j′+fi,j−j′+1∣1≤i′<i,1≤j′<j,
当我们知道 f i ′ , j + f i − i ′ , j f_i',j+f_i-i',j fi′,j+fi−i′,j、 f i , j ′ + f i , j − j ′ f_i,j' +f_i,j-j' fi,j′+fi,j−j′ 中谁更优时,不妨假设当 i + j = k + g i+j=k+g i+j=k+g 时 f i , j = f k , g f_i,j = f_k,g fi,j=fk,g,
我们将 f i , j f_i,j fi,j 的表达式变形为 f i , j = min f i ′ , j + f i − i ′ , j + 1 , f i , j ′ + f i , j − j ′ + 1 − 1 f_i,j=\\min\\f_i',j+f_i-i',j+1,f_i,j' +f_i,j-j'+1\\-1 fi,j=minfi′,j+fi−i′,j+1,fi,j′+fi,j−j′+1−1,将 f i , 1 = i − 1 f_i,1 = i-1 fi,1=i−1 代入式中会发现,无论怎么拆分,最后表达式一定是若干 f 1 , x + 1 f_1,x+1 f1,x+1、 f y , 1 + 1 f_y,1+1 fy,1+1 和 − 1 -1 −1 的累加,其和一定是 i × j − 1 i×j-1 i×j−1。
耶,我们证明切分次数与切分方案无关,
太棒了,草
试题 B: 寻找整数
本题总分: 5 5 5 分
【问题描述】
有一个不超过 1 0 17 10^17 1017 的正整数 n n n,知道这个数除以 2 2 2 至 49 49 49 后的余数如下表所示,求这个正整数最小是多少。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
2022040920220409
扩展中国剩余定理
对于一元线性同余方程组 : : : x ≡ r 1 ( m o d n 1 ) x ≡ r 2 ( m o d n 2 ) ⋮ x ≡ r k ( m o d n k ) \\begincases x &\\equiv r_1 \\pmod n_1 \\\\ x &\\equiv r_2 \\pmod n_2 \\\\ &\\ \\vdots \\\\ x &\\equiv r_k \\pmod n_k \\\\ \\endcases 第十三届蓝桥杯大赛软件赛省赛 C/C++ 大学 B 组思考+总结
2022 第十三届蓝桥杯大赛软件赛省赛,C/C++ 大学B组题解
2022 第十三届蓝桥杯大赛软件赛省赛(第二场),C/C++ 大学B组题解
2020 第十一届蓝桥杯大赛软件赛省赛(第一场),C/C++大学B组题解