目录
第 1 题:组队
题目描述
运行限制
代码:
第 2 题:不同子串
题目描述
运行限制
代码:
思路:
第 3 题:等差数列
题目描述
输入描述
输出描述
输入输出样例
运行限制
代码:
思路:
第 4 题:波动数列_dp
题目描述
输入描述
输出描述
输入输出样例
运行限制
代码:
思路:
第 1 题:组队
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
作为篮球队教练,你需要从以下名单中选出 11 号位至 55 号位各一名球员,组成球队的首发阵容。
每位球员担任 11 号位至 55 号位时的评分如下表所示。请你计算首发阵容 11 号位至 55 号位的评分之和最大可能是多少?
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
代码:
看图说话,没啥好说的
package 第十四届蓝桥杯三月真题刷题训练.day14;
/**
* @author yx
* @date 2023-03-17 8:27
*/
public class 组队 {
public static void main(String[] args) {
System.out.println(97+99+99+97+98);
}
}
第 2 题:不同子串
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成的串。例如,字符串 aaab 有非空子串 aa, b, aa, ab, aaa, aab, aaab,一共 7 个。注意在计算时,只算本质不同的串的个数。
请问,字符串 0100110001010001 有多少个不同的非空子串?
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
代码:
package 第十四届蓝桥杯三月真题刷题训练.day14;
import java.io.*;
import java.util.HashMap;
import java.util.HashSet;
/**
* @author yx
* @date 2023-03-17 8:32
*/
public class 不同子串 {
static PrintWriter out =new PrintWriter(System.out);
static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in));
static StreamTokenizer in=new StreamTokenizer(ins);
/**
* 输入
* in.nextToken()
* int a= (int)in.nval;
*
* 输出
* out.print();
* out.flush();
*/
public static void main(String[] args) throws IOException {
HashSet<String> set=new HashSet<>();
String strings=ins.readLine();
int length=strings.length();
for (int i = 0; i < length; i++) {
for (int j = i+1; j <= length; j++) {
set.add(strings.substring(i,j));
}
}
out.println(set.size());
out.flush();
}
}
思路:
(1)学会String.substring()方法切割字符串,不会的去菜鸟上看一下substring的工作原理
(2)HashSet存储每一次切割下来的字符串,输出其size,即个数
第 3 题:等差数列
题目描述
数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一 部分的数列,只记得其中 N 个整数。
现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有几项?
输入描述
输入的第一行包含一个整数 NN。
第二行包含 NN 个整数 A1,A2,⋅⋅⋅,AN。(注意 A1 ∼ AN 并不一定是按等差数列中的顺序给出)
其中,2≤N≤10^5,0≤Ai≤10^9。
输出描述
输出一个整数表示答案。
输入输出样例
示例
输入
5 2 6 4 10 20
输出
10
样例说明: 包含 2、6、4、10、20 的最短的等差数列是 2、4、6、8、10、12、14、16、 18、20。
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
代码:
package 第十四届蓝桥杯三月真题刷题训练.day14;
import java.io.*;
import java.util.Arrays;
import java.util.Scanner;
/**
* @author yx
* @date 2023-03-17 9:16
*/
public class 等差数列改良版 {
static PrintWriter out =new PrintWriter(System.out);
static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in));
static StreamTokenizer in=new StreamTokenizer(ins);
/**
* 输入
* in.nextToken()
* int a= (int)in.nval;
*
* 输出
* out.print();
* out.flush();
*/
public static void main(String[] args) throws IOException {
// Scanner scanner = new Scanner(System.in);
in.nextToken();
// int n=scanner.nextInt();
int n=(int)in.nval;
int[] nums=new int[n];
for (int i = 0; i < n; i++) {
// nums[i]=scanner.nextInt();
in.nextToken();
nums[i]=(int) in.nval;
}
Arrays.sort(nums);
int temp=Integer.MAX_VALUE;
for (int i = 1; i < n; i++) {
int chaZhi=nums[i]-nums[i-1];
if(chaZhi<temp){
temp=chaZhi;
}
}
if(temp==0){//注意公差为0的情况,即:1 1 1 1
System.out.println(n);
}else {
System.out.println((nums[n-1]-nums[0])/temp+1);
}
}
}
思路:
(1)这题普通的Scanner也能过,对快读没什么要求
(2)求数和数之间的最小间隔,注意间隔为0的情况,即:1 1 1 1 1 间隔为0直接输出n就可以了
第 4 题:波动数列_dp
题目描述
观察这个数列:
1 3 0 2 −1 1 −2 ⋯
这个数列中后一项总是比前一项增加 2 或者减少 3。
栋栋对这种数列很好奇,他想知道长度为 n 和为 s 而且后一项总是比前一项增加 a 或者减少 b 的整数数列可能有多少种呢?
输入描述
输入的第一行包含四个整数 n,s,a,b,含义如前面说述。
其中,1≤n≤1000,−10^9≤s≤10^9,1≤a,b≤10^6。
输出描述
输出一行,包含一个整数,表示满足条件的方案数。由于这个数很大,请输出方案数除以 10^8+7的余数。
输入输出样例
示例
输入
4 10 2 3
输出
2
样例说明
这两个数列分别是 2 4 1 3 和 7 4 1 -2。
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
代码:
思路:
(1)深搜比较好想,枚举初始值x在范围内所有的值,然后爆搜,但是会超时
(2)dp状态转移方程需要时间理解,现在只看懂一半,晚上再继续看看