【第十四届蓝桥杯三月真题刷题训练——第 12 天（3.15）& 0的个数 & 超级质数 & 卡牌 & 染色时间】

26 篇文章 3 订阅

20220000

4

第二题：超级质数

import java.io.IOException;

public class Main {

public static void main(String[] args) throws IOException {

System.out.println(373);

}
}

import java.io.IOException;
import java.util.Scanner;

public class Main {

public static void main(String[] args) throws IOException {

Scanner s = new Scanner(System.in);
String n = s.nextLine();
int res = 0;
for(int i = n.length()-1; i >= 0; i--) {
if(n.charAt(i) != '0') break;
res++;
}
System.out.println(res);
}
}

第三题：卡牌

4 5
1 2 3 4
5 5 5 5

3

package codingTest2;

import java.io.IOException;

public class Main {

static int N = (int)2e5+10;
static int[] a = new int[N];
static int[] b = new int[N];
static long n, m;

static boolean check(int x) {
long v = m;
for(int i = 1; i <= n; i++) {
if(a[i] >= x) continue;
if(a[i]+b[i] < x) return false;
if(a[i]+b[i] >= x && v >= x-a[i]) {
v -= x-a[i];
}else {
return false;
}
}

return true;
}

public static void main(String[] args) throws IOException {

n = Long.parseLong(s[0]);
m = Long.parseLong(s[1]);

for(int i = 1; i <= n; i++) {
a[i] = Integer.parseInt(s[i-1]);
}

for(int i = 1; i <= n; i++) {
b[i] = Integer.parseInt(s[i-1]);
}

int l = 0, r = 3*N;
while(l < r) {
int mid = (l + r + 1) >> 1;
if(check(mid)) l = mid;
else r = mid-1;
}

System.out.println(r);
}
}

第四题：染色时间

2 3
1 2 3
4 5 6

12
import java.io.IOException;
import java.util.Arrays;
import java.util.PriorityQueue;

public class Main {
static int N = 510, INF = 0x3f3f3f3f;
static int[][] g = new int[N][N];
static int[][] dist = new int[N][N];
static int[] dx = {0, 1, 0, -1};
static int[] dy = {1, 0, -1, 0};
static int n, m;
static int res;

public static void main(String[] args) throws IOException {
n = Integer.parseInt(s[0]);
m = Integer.parseInt(s[1]);

for(int i = 1; i <= n; i++) {
Arrays.fill(dist[i], INF);
for(int j = 1; j <= m; j++) {
g[i][j] = Integer.parseInt(s[j-1]);
}
}

PriorityQueue<int[]> q = new PriorityQueue<>((o1, o2)->o1[0]-o2[0]);

res = dist[1][1] = g[1][1];

while(!q.isEmpty()) {
int[] t = q.poll();
int d = t[0];
int x = t[1];
int y = t[2];

for(int i = 0; i < 4; i++) {
int tX = x + dx[i], tY = y + dy[i];
if(tX >= 1 && tX <= n && tY >= 1 && tY <= m && dist[tX][tY] == INF) {
dist[tX][tY] = d + g[tX][tY];
res = Math.max(dist[tX][tY], res);
}
}
}

System.out.println(res);

}
}

• 0
点赞
• 1
收藏
觉得还不错? 一键收藏
• 0
评论
03-29 586
03-26 257
07-28
09-30 9906
03-11 1131
03-22 812
11-02 879

“相关推荐”对你有帮助么？

• 非常没帮助
• 没帮助
• 一般
• 有帮助
• 非常有帮助

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