大家好,我是snippet,今天是刷蓝桥真题的第十七天,下面是我今天的题解
目录
一、ASC
题目内容:
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
已知大写字母 A 的 ASCII 码为 65,请问大写字母 L 的 ASCII 码是多少?
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
解题思路:
这个题没有啥思路,直接输出
代码:
package 蓝桥杯31天真题冲刺.Day17;
/**
* @author snippet
* @data 2023-03-20
* ASC-蓝桥云课
*/
public class T1_ASC {
public static void main(String[] args) {
System.out.println(65 + ('L' - 'A'));
}
}
二、递增三元组
题目链接:递增三元组 - 蓝桥云课 (lanqiao.cn)
题目内容:
题目描述
给定三个整数数组
A=[A1,A2,⋯AN],
B=[B1,B2,⋯BN],
C=[C1,C2,⋯CN],
请你统计有多少个三元组 (i,j,k) 满足:
1.1≤i,j,k≤N;
2.Ai<Bj<Ck。
输入描述
第一行包含一个整数 N。
第二行包含 N 个整数 A1,A2,⋯AN。
第三行包含 N 个整数 B1,B2,⋯BN。
第四行包含 N 个整数 C1,C2,⋯CN。
其中,1≤N≤10^5,0≤Ai,Bi,Ci≤10^5。
输出描述
输出一个整数表示答案。
输入输出样例
示例
输入
3
1 1 1
2 2 2
3 3 3输出
27
运行限制
- 最大运行时间:2s
- 最大运行内存: 256M
解题思路:
因为数据范围是到10^5,所以我们不能使用三重for循环,只可以对a/b/c三个选定一个,然后对其他两个数据进行二分查找,根据(a[i]<b[j]<c[k])我们可以先给定b的位置,然后来二分查找a的位置(t)和c的位置(e),然后对答案进行求和 ans += t * (n - e + 1);
代码:
package 蓝桥杯31天真题冲刺.Day17;
import java.io.*;
import java.util.Arrays;
/**
* @author snippet
* @data 2023-03-20
* 递增三元组-蓝桥云课
*/
public class T2_递增三元组 {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
static int n;// n表示数据的个数
static long ans = 0;// 记得开long
static int N = 100100;
static int[] a = new int[N];
static int[] b = new int[N];
static int[] c = new int[N];
public static void main(String[] args) throws IOException {
String[] s = br.readLine().split(" ");
n = Integer.parseInt(s[0]);
s = br.readLine().split(" ");
for (int i = 1; i <= n; i++) {
a[i] = Integer.parseInt(s[i-1]);
}
s = br.readLine().split(" ");
for (int i = 1; i <= n; i++) {
b[i] = Integer.parseInt(s[i-1]);
}
s = br.readLine().split(" ");
for (int i = 1; i <= n; i++) {
c[i] = Integer.parseInt(s[i-1]);
}
Arrays.sort(a,1,n+1);
Arrays.sort(b,1,n+1);
Arrays.sort(c,1,n+1);
for (int i = 1; i <= n; i++) {
// 对a进行二分找到最大的小于b[i]的a的数据的位置
int left = 1, right = n;
while (left < right) {
int mid = left + right + 1 >> 1;
if (a[mid] < b[i]) left = mid;
else right = mid - 1;
}
int t = left;
// 对c进行二分找到最小的大于b[i]的c的数据的位置
left = 1;
right = n;
while (left < right) {
int mid = left + right >> 1;
if (b[i] < c[mid]) {
right = mid;
} else {
left = mid + 1;
}
}
if (a[t] < b[i] && c[right] > b[i]) ans += (long)t * (n - right + 1);
}
// for (int i = 1; i <= n; i++) {
// System.out.println(a[i] + " " + b[i] + " " + c[i]);
// }
pw.println(ans);
pw.flush();
br.close();
}
}
三、环境治理
题目内容:
问题描述
LQ 国拥有 n 个城市, 从 0 到 n−1 编号, 这 n 个城市两两之间都有且仅有 一条双向道路连接, 这意味着任意两个城市之间都是可达的。每条道路都有一 个属性 D, 表示这条道路的灰尘度。当从一个城市 A 前往另一个城市 B 时, 可 能存在多条路线, 每条路线的灰尘度定义为这条路线所经过的所有道路的灰尘 度之和, LQ 国的人都很讨厌灰尘, 所以他们总会优先选择灰尘度最小的路线。
LQ 国很看重居民的出行环境, 他们用一个指标 P 来衡量 LQ 国的出行环 境, P 定义为:
P=i=0∑n−1j=0∑n−1d(i,j)
其中 d(i,j) 表示城市 i 到城市 j 之间灰尘度最小的路线对应的灰尘度的值。 为了改善出行环境, 每个城市都要有所作为, 当某个城市进行道路改善时, 会将与这个城市直接相连的所有道路的灰尘度都减少 1 , 但每条道路都有一个 灰尘度的下限值 L, 当灰尘度达到道路的下限值时, 无论再怎么改善, 道路的 灰尘度也不会再减小了。
具体的计划是这样的:
第 1 天, 0 号城市对与其直接相连的道路环境进行改善;
第 2 天, 1 号城市对与其直接相连的道路环境进行改善;
⋯⋯
第 n 天, n−1 号城市对与其直接相连的道路环境进行改善;
第 n+1 天, 0 号城市对与其直接相连的道路环境进行改善;
第 n+2 天, 1 号城市对与其直接相连的道路环境进行改善;
LQ 国想要使得 P 指标满足 P≤Q 。请问最少要经过多少天之后, P 指标 可以满足 P≤Q 。如果在初始时就已经满足条件, 则输出 0 ; 如果永远不可能 满足, 则输出 −1−1 。
输入格式
输入的第一行包含两个整数 n,Q, 用一个空格分隔, 分别表示城市个数和 期望达到的 P 指标。
接下来 n 行, 每行包含 n 个整数, 相邻两个整数之间用一个空格分隔, 其 中第 i 行第 j 列的值 Dij(Dij=Dji,Dii=0) 表示城市 i 与城市 j 之间直接相连 的那条道路的灰尘度。
接下来 n 行, 每行包含 n 个整数, 相邻两个整数之间用一个空格分隔, 其 中第 i 行第 j 列的值 Lij(Lij=Lji,Lii=0) 表示城市 i 与城市 j 之间直接相连的 那条道路的灰尘度的下限值。
输出格式
输出一行包含一个整数表示答条。
样例输入
3 10
0 2 4
2 0 1
4 1 0
0 2 2
2 0 0
2 0 0样例输出
2
评测用例规模与约定
对于 30% 的评测用例, 1≤n≤10,0≤Lij≤Dij≤10 ;
对于 60% 的评测用例, 1≤n≤50,0≤Lij≤Dij≤100000;
对于所有评测用例, 1≤n≤100,0≤Lij≤Dij≤100000,0≤Q≤2^ 31−1 。
运行限制
- 最大运行时间:10s
- 最大运行内存: 512M
解题思路:
代码:
四、小球称重
题目内容:
问题描述
小蓝有 N 个小球, 编号 1 至 N 。其中 N−1 是正品, 重量相同; 有 1 个是 次品, 重量比正轻。
为了找出次品, 小蓝已经用天平进行了 M 次称重, 并且记录下来每次两边 放的小球编号, 和称重结果。
请你根据记录, 判断还剩下几个小球有次品的嫌疑。
输入格式
第一行包含 2 个整数 N 和 M 。
以下包含 M 次称重记录, 每个记录占 4 行。
第一行是一个整数 K, 表示天平两边各放了 K 个小球。
第二行包含 K 个整数, 代表放在天平左边的小球编号。
第三行包含 K 个整数, 代表放在天平右边的小球编号。
第四行是一个字符, 为 ' >> ', '<', ' == '之一。' >> ' 代表左边比右边重, '<' 代
在一次称重中保证每个小球最多出现 1 次。
输出格式
输出一个整数, 代表答案。
样例输入
10 2
3
1 2 3
4 5 6
<
2
3 7
8 9
=样例输出
2
样例说明
1,2,3<4,5,6 能判断出次品在 1,2,3 之中。
3,7=8,9 能判断出 3 不可能是次品。
所以只剩下 1,2 可能是次品。
评测用例规模与约定
对于 40% 的数据, 1≤N≤106;
对于 100% 的数据, 1≤N≤109,1≤M≤105, 参与 M 次称重的小球总数 ≤10^6.
运行限制
- 最大运行时间:10s
- 最大运行内存: 512M
解题思路:
代码: