【蓝桥杯研究生组】第15届Java试题答案整理
D 题
试题 D: 商品库存管理
时间限制: 3.0s 内存限制: 512.0MB 本题总分:10 分
【问题描述】
在库存管理系统中,跟踪和调节商品库存量是关键任务之一。小蓝经营的仓库中存有多种商品,这些商品根据类别和规格被有序地分类并编号,编号范围从 1 至 n 。初始时,每种商品的库存量均为 0。
为了高效地监控和调整库存量,小蓝的管理团队设计了 m 个操作,每个操作涉及到一个特定的商品区间,即一段连续的商品编号范围(例如区间 ([L, R]))。执行这些操作时,区间内每种商品的库存量都将增加 1。然而,在某些情况下,管理团队可能会决定不执行某些操作,使得这些操作涉及的商品区间内的库存量不会发生改变,维持原有的状态。
现在,管理团队需要一个评估机制,来确定如果某个操作未被执行,那么最终会有多少种商品的库存量为 0。对此,请你为管理团队计算出,对于每个操作,如果不执行该操作而执行其它操作,库存量为 0 的商品的种类数。
【输入格式】
输入的第一行包含两个整数 ( n ) 和 ( m ),分别表示商品的种类数和操作的个数。
接下来的 ( m ) 行,每行包含两个整数 ( L ) 和 ( R ),表示一个操作涉及的商品区间。
【输出格式】
输出 ( m ) 行,每行一个整数,第 ( i ) 行的整数表示如果不执行第 ( i ) 个操作,则最终库存量为 0 的商品种类数。
【输入示例】
5 3
1 2
2 4
3 5
【输出示例】
1
0
1
import java.util.Scanner;/**/
public class KuchunManage {public static void main(String[] args) {Scanner in = new Scanner(System.in);// 商品个数int prouctNum = in.nextInt();// 操作个数int operationNum = in.nextInt();int[] products = new int[prouctNum + 1];int[][] operations = new int[operationNum][2];for (int i=0; i<operationNum; i++){int left = in.nextInt();int right = in.nextInt();operations[i][0] = left;operations[i][1] = right;for(int j = left; j<=right; j++) {products[j]++;}}// 去掉第 i 个操作的结果for (int i=0; i<operationNum; i++) {int left = operations[i][0];int right = operations[i][1];for(int j = left; j<=right; j++) {products[j]--;}int ans = 0;for (int k=1; k<=prouctNum; k++){if (products[k] == 0) {ans++;}}// 还原for(int j = left; j<=right; j++) {products[j]++;}System.out.println(ans);}}
}
F 题
import java.util.Scanner;public class HuiWen {// 能否加入任意个 l 、 q 、 b,使得字符串 S 变为回文字符串// 判断字符串 S 是否是回文字符串public static boolean isHuiWen(String S){int len = S.length();for (int i = 0; i<len / 2; i++){if (S.charAt(i) != S.charAt(len - i - 1)) {return false;}}return true;}public static boolean canBeHuiWen(String S){int len = S.length();int end = 1;// 从头开始早最长的回文for (int i = 1; i<len-1; i++) {String subString = S.substring(0, i);if (isHuiWen(subString)) {end = i;}}// 对 end 之后的字符,判断是否都为 l、q、bfor (int i=end; i<len; i++){if (S.charAt(i) != 'l' && S.charAt(i) != 'q' && S.charAt(i) != 'b') {return false;}}return true;}// 判断字符串 S 中从头开始的最长的回文字串// 1. gmgqlq// gmg// 剩下的 qlq 可以变为回文// 2. pdlbll// p// 剩下的 dlbll 不能变为回文public static void main(String[] args) {Scanner in = new Scanner(System.in);int count = in.nextInt();for (int i=0; i<count; i++) {String S = in.next();if (isHuiWen(S)){System.out.println("Yes");} else if (canBeHuiWen(S)){System.out.println("Yes");} else {System.out.println("No");}}}
}