2019第十届蓝桥杯JAVA B组题目分析
目录
- A:组队(难度:★★★)
- 分析:
- 代码
- B:不同字串(难度:★)
- 分析:
- 代码:
- C:数列求值(难度:★)
- 分析:
- 代码:
- D:数的分解:(难度:★★)
- 分析:
- 代码:
- E:迷宫:(难度:★★★★)
- 分析:
- 代码:
- F:特别数的和:(难度:★★)
- 分析:
- 代码:
- G:外卖店优先级(难度:★★★)
- **分析:**
- 代码:
- H:人物相关性分析(难度:★★★★★)
- 分析:
- 代码:
- I:后缀表达式(难度:★★★★)
- 分析:
- 代码:
- G:灵能传输(难度:★★★★★)
A:组队(难度:★★★)
team信息文本: 1 97 90 0 0 0
2 92 85 96 0 0
3 0 0 0 0 93
4 0 0 0 80 86
5 89 83 97 0 0
6 82 86 0 0 0
7 0 0 0 87 90
8 0 97 96 0 0
9 0 0 89 0 0
10 95 99 0 0 0
11 0 0 96 97 0
12 0 0 0 93 98
13 94 91 0 0 0
14 0 83 87 0 0
15 0 0 98 97 98
16 0 0 0 93 86
17 98 83 99 98 81
18 93 87 92 96 98
19 0 0 0 89 92
20 0 99 96 95 81
**
分析:
**
先找出第一个位置的球员,做标记。
再找出第二个位置的球员,做标记。
。。。
最后找出第五个位置的球员,做标记。
计算五个做标记球员的sum是多少。
对所有的和取max即为最优解!
代码
:
满分
package JB2019;
//490
import java.util.Scanner;
//暴力递归要记得回溯
public class A{public static int ans=-1;public static void qpl(int arr[][],boolean buf[],int k,int cur){if(k==6){ans=Math.max(ans,cur );return;}for(int i=0;i<20;i++){if(buf[i])continue;buf[i]=true;cur+=arr[i][k];qpl(arr,buf,k+1,cur);buf[i]=false;cur-=arr[i][k];}}public static void main(String[] args) {Scanner sc=new Scanner(System.in);int arr[][]=new int[20][6];boolean buf[]=new boolean [20];for(int i=0;i<20;i++){for(int j=0;j<6;j++){arr[i][j]=sc.nextInt();}}qpl(arr,buf,1,0);System.out.println(ans);}
}
**
B:不同字串(难度:★)
**
题目数据01字符串:
0100110001010001
**
分析:
**
暴力枚举所有起点&终点。
将中间的字符串放入HashSet去重。
最终HashSet的容量即为ans。
代码:
满分
package JB2019;
//100
import java.util.*;
//SubString 包括begin,不包括end
public class B {public static void main(String[] args) {Scanner sc=new Scanner(System.in);String s=sc.next();HashSet<String> set=new HashSet<String>();for(int i=0;i<s.length();i++){for(int j=i+1;j<=s.length();j++){set.add(s.substring(i,j));}}System.out.println(set.size());}
}
**
C:数列求值(难度:★)
**
**
分析:
**
此题直接计算即可!
考虑内存不要溢出!
代码:
满分
package JB2019;
//考虑时间会不会过长
//考虑内存会不会溢出
//4659
public class C {public static void main(String[] args) {int arr[]=new int[20190325];arr[1]=1;arr[2]=1;arr[3]=1;for(int i=4;i<20190325;i++){arr[i]+=(arr[i-1]+arr[i-2]+arr[i-3]);arr[i]%=10000;}System.out.println(arr[20190324]);}
}
**
D:数的分解:(难度:★★)
**
**
分析:
**
假设三个整数为 i,j,k 。
我们令 i < j < k 。
再枚举出 i & j ,
通过 k = 2019 - i - j 得出 k。
最终我们check 一下三个数字中是否含有 2 or 4.
如果符合条件即进行计数。
代码:
满分
package JB2019;
//很明显,三层for时间很可能超限
//所以我们用两层,用ans-前两层即第三层
//40785
public class D {public static boolean check(int n){while(n>0){if(n%10==2||n%10==4)return false;else n/=10;}return true;}public static void main(String[] args) {int sum=2019;int ans=0;for(int i=1;i<700;i++){sum-=i;for(int j=i+1;j<1050;j++){sum-=j;if(sum>j&&check(i)&&check(j)&&check(sum)){ans++;}sum+=j;}sum+=i;}System.out.println(ans);}
}
**
E:迷宫:(难度:★★★★)
**
maze.txt文件如下:
01010101001011001001010110010110100100001000101010
00001000100000101010010000100000001001100110100101
01111011010010001000001101001011100011000000010000
01000000001010100011010000101000001010101011001011
00011111000000101000010010100010100000101100000000
11001000110101000010101100011010011010101011110111
00011011010101001001001010000001000101001110000000
10100000101000100110101010111110011000010000111010
00111000001010100001100010000001000101001100001001
11000110100001110010001001010101010101010001101000
00010000100100000101001010101110100010101010000101
11100100101001001000010000010101010100100100010100
00000010000000101011001111010001100000101010100011
10101010011100001000011000010110011110110100001000
10101010100001101010100101000010100000111011101001
10000000101100010000101100101101001011100000000100
10101001000000010100100001000100000100011110101001
00101001010101101001010100011010101101110000110101
11001010000100001100000010100101000001000111000010
00001000110000110101101000000100101001001000011101
10100101000101000000001110110010110101101010100001
00101000010000110101010000100010001001000100010101
10100001000110010001000010101001010101011111010010
00000100101000000110010100101001000001000000000010
11010000001001110111001001000011101001011011101000
00000110100010001000100000001000011101000000110011
10101000101000100010001111100010101001010000001000
10000010100101001010110000000100101010001011101000
00111100001000010000000110111000000001000000001011
10000001100111010111010001000110111010101101111000
**
分析:
**
迷宫类型的题目一般用BFS or DFS,
此题询问移动路线,所以我们选择DFS。
为了防止陷入死循环,我们采用一个buf数组用来标记。
每次移动将移动路径记录下来,
当走到终点时,将路线依次与ans相比较。
最终走完所有路径即得到结果。
代码:
满分
package JB2019;
//深搜时计算下每个位置的步数,避免重复经过
import java.util.Scanner;
//DDDDRRURRRRRRDRRRUUURRDDDLDDDLDDRDDDDDDDDDDDDRDDRRRUUURRUUUUURUURUUUURURRDDDRRRDDDRDDLDLDDDDDDLDDRRURDDDRURURRDDDRRRRUURUUUUUUUULLLUUUURRRRUUULDLLUUUULLUUULUURRDRRUUURURRRDDRRRRRDDRRDDLLLDDRRDDRDDLDDDLLDDLLLDLDDDLDDDDDDDRRRUUUUURRRRRURDDDDDDDRR
public class E {public static int endx=30,endy=50;public static String ans="";public static int [][] arr = new int[endx][endy];public static char [][] c = new char[endx][endy];public static boolean [][] buf = new boolean[endx][endy];public static String min(String s1,String s2){if(s1.length()>s2.length()){return s2;}else if(s1.length()<s2.length()){return s1;}else{char c1[]=s1.toCharArray();char c2[]=s2.toCharArray();for(int i=0;i<c1.length;i++){if(c1[i]>c2[i]) return s2;else if(c1[i]<c2[i]) return s1;else continue;}}return s1;}public static void dfs(int x,int y,String cur,int step){arr[x][y]=step;if(endx==x+1&&endy==y+1){ans=ans.equals("")?cur:min(ans,cur);return;}if(x+1>=0&&x+1<endx&&arr[x+1][y]<=step&&buf[x+1][y]==false){buf[x+1][y]=true;dfs(x+1,y,cur+"D",step+1);buf[x+1][y]=false;}if(x-1>=0&&x-1<endx&&arr[x-1][y]<=step&&buf[x-1][y]==false){buf[x-1][y]=true;dfs(x-1,y,cur+"U",step+1);buf[x-1][y]=false;}if(y+1>=0&&y+1<endy&&arr[x][y+1]<=step&&buf[x][y+1]==false){buf[x][y+1]=true;dfs(x,y+1,cur+"R",step+1);buf[x][y+1]=false;}if(y-1>=0&&y-1<endy&&arr[x][y-1]<=step&&buf[x][y-1]==false){buf[x][y-1]=true;dfs(x,y-1,cur+"L",step+1);buf[x][y-1]=false;}}public static void main(String[] args) {Scanner sc=new Scanner(System.in);for(int i=0;i<endx;i++){c[i]=sc.next().toCharArray();for(int j=0;j<endy;j++){if(c[i][j]=='1'){arr[i][j]=Integer.MAX_VALUE;}}}buf[0][0]=true;dfs(0,0,"",0);System.out.println(ans);}
}
**
F:特别数的和:(难度:★★)
**
**
分析:
**
从1 ~ n,对每一个数据进行check,
符合条件,即加入ans。
最终运行结束时,ans即为解!
代码:
满分
package JB2019;import java.util.Scanner;
//暴力排查
public class F {public static boolean check(int k){while(k>0){if(k%10==2||k%10==0||k%10==1||k%10==9){return true;}k/=10;}return false;}public static void main(String[] args) {Scanner sc=new Scanner(System.in);int n=sc.nextInt();int ans=0;for(int i=1;i<=n;i++){if(check(i)){ans+=i;}}System.out.println(ans);}
}
**
G:外卖店优先级(难度:★★★)
**
【样例输入】
2 6 6
1 1
5 2
3 1
6 2
2 1
6 2
【样例输出】
1
分析:
采用邻接表的形式对订单信息进行存储,
然后按照时间顺序模拟订单下单操作。
随时对优先缓存容器进行更新!
《时间复杂度有点莽,答案正确但时间不太稳定》
后续应该还会再进行优化
代码:
测试满分,就看评测姬给不给力了
package JB2019;import java.util.*;
//用容器数组,免去排序时间
//满分
public class G {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt(), m = sc.nextInt(), t = sc.nextInt();ArrayList<Integer>[] list = new ArrayList[t + 1];for (int i = 0; i <= t; i++) {list[i] = new ArrayList<Integer>();}for (int i = 0; i < m; i++) {list[sc.nextInt()].add(sc.nextInt());}ArrayList<String> ans = new ArrayList<String>();HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();for (int i = 1; i <= t; i++) {for (int d : map.keySet()) {if (!list[i].contains(d)) {map.put(d, (map.get(d) - 1) > 0 ? (map.get(d) - 1) : 0);}}for (int d : list[i]) {map.put(d, map.containsKey(d) ? (map.get(d) + 2) : 2);}for (int d : map.keySet()) {if (map.get(d) > 5 && (!ans.contains(String.valueOf(d)))) {ans.add(String.valueOf(d));} else if (map.get(d) < 4 && ans.contains(String.valueOf(d))) {ans.remove(String.valueOf(d));}}}System.out.println(ans.size());}
}
**
H:人物相关性分析(难度:★★★★★)
**
【样例输入】
20
This is a story about Alice and Bob. Alice wants to send a private message to Bob.
【样例输出】
2
**
分析:
**
我将所有 Alice 信息储存在 Al 容器内,
将所有 Bob 位置信息纯存在 Bo 容器内,
随后采用差分的方式确定每一个 Alice 的覆盖区间。
再采用前缀和获取每一个坐标对于Bob的QZH收益。
最后遍历Bob的位置信息,通过QZH数组获取收益即可。
最终所有收益的和即为解。
代码:
满分
package JB2019;import java.util.ArrayList;
import java.util.Scanner;public class H {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int k = sc.nextInt();sc.nextLine();String s = sc.nextLine();char c[] = s.toCharArray();ArrayList<Integer> Al = new ArrayList<Integer>();ArrayList<Integer> Bo = new ArrayList<Integer>();for (int i = 0; i < c.length; i++) {if ((i - 1 < 0 || c[i - 1] == '.' || c[i - 1] == ' ') && c[i] == 'A' && c[i + 1] == 'l' && c[i + 2] == 'i'&& c[i + 3] == 'c' && c[i + 4] == 'e' && (c[i + 5] == '.' || c[i + 5] == ' ')) {Al.add(i);}}for (int i = 0; i < c.length; i++) {if ((i - 1 < 0 || c[i - 1] == '.' || c[i - 1] == ' ') && c[i] == 'B' && c[i + 1] == 'o' && c[i + 2] == 'b'&& (c[i + 3] == '.' || c[i + 3] == ' ')) {Bo.add(i);}}long ans = 0;int CF[] = new int[1000009];int QZH[] = new int[1000005];for (int t : Al) {CF[Math.max(0, t - k - 3)]++;CF[Math.min(1000000, t + k + 5)]--;}QZH[0] = CF[0];for (int i = 1; i < 1000005; i++) {QZH[i] = QZH[i - 1] + CF[i];}for (int t : Bo) {ans += QZH[t];}System.out.println(ans);}
}
**
I:后缀表达式(难度:★★★★)
**
【样例输入】
1 1 1 2 3
【样例输出】
4
**
分析:
**
这是一个思维题,只需要稍微分析即可得解。
首先,在后缀表达式中虽然没有“()”的存在,
但是在计算过程中,括号还是可以隐性存在的。
举个例子
输入:
2 7
-1 0 1 2 3 4 5 6 7 8
输出:
37
因为0 - (1-2-3-4-(5+6)-(7+8))=37
我们可以推导出无论何种状态下,我们均可以把所有的后续值变成正值。
我们唯一不确定的即是第一个元素。
我们可以列出表格。
根据表格进行编码即可。
代码:
满分
package JB2019;import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Scanner;public class I {public static void main(String[] args) {Scanner sc=new Scanner(System.in);int n=sc.nextInt();int m=sc.nextInt();ArrayList<Integer> al=new ArrayList<Integer>();ArrayList<Integer> z=new ArrayList<Integer>();ArrayList<Integer> f=new ArrayList<Integer>();int x;for(int i=0;i<n+m+1;i++){x=sc.nextInt();al.add(x);if(x>0)z.add(x);else if(x<0)f.add(x);else {z.add(x);f.add(x);}}long ans=0,sum=0;for(int i=0;i<al.size();i++){sum+=Math.abs(al.get(i));}Collections.sort(al);Collections.sort(z);Collections.sort(f);if(m==0&&n==0){ans=al.get(0);}else if(z.size()>0&&f.size()>0){if(n>0&&m==0){for(int i=0;i<al.size();i++){ans+=al.get(i);}}else{ans=sum;}}else if(z.size()==0){if(n>0&&m==0){ans=-sum;}else{ans=sum+2*f.get(f.size()-1);}}else{if(n>0&&m==0){ans=sum;}else{ans=sum-2*z.get(0);}}System.out.println(ans);}
}
**
G:灵能传输(难度:★★★★★)
**
【输入格式】
本题包含多组询问。输入的第一行包含一个正整数 T 表示询问组数。 接下来依次输入每一组询问。
每组询问的第一行包含一个正整数
n,表示高阶圣堂武士的数量。 接下来一行包含 n 个数 a1, a2, · · · , an。
【输出格式】
输出 T 行。每行一个整数依次表示每组询问的答案。
【样例输入】
3
3
5 -2 3
4
0 0 0 0
3
1 2 3
【样例输出】
3
0
3
【样例说明】
对于第一组询问:
对 2 号高阶圣堂武士进行传输操作后 a1 = 3,a2 = 2,a3 = 1。答案为 3。
对于第二组询问:
这一组高阶圣堂武士拥有的灵能都正好可以让他们达到最佳战斗状态。
【样例输入】
3
4
-1 -2 -3 7
4
2 3 4 -8
5
-1 -1 6 -1 -1
【样例输出】
5
7
4
**
希望会的大佬指点
**
答疑资料qq群:1007576722
2019第十届蓝桥杯JAVA B组题目分析相关推荐
- 2019第十届蓝桥杯JAVA G组题解
蓝桥杯历年真题及解析. 试题 A: 立方和 本题总分:5 分 [问题描述] 小明对数位中含有 2.0.1.9 的数字很感兴趣,在 1 到 40 中这样的数包 括 1.2.9.10 至 32.39 和 ...
- 2019 第十届蓝桥杯 Java B组 赛后总结
我是大三第一次参加蓝桥杯,也是最后一次参加了(大四应该没时间了).我参加的是java b组,总体来说赛程挺顺利的,第一次参赛觉得四个小时有点不够哈哈哈.不过蓝桥杯这个比赛我是带着试一下的心态去参加的. ...
- 蓝桥杯java 大纲,2019 第十届蓝桥杯Java省赛B组个人总结
前言 19年的这场蓝桥杯,对我自己的打击挺大的,以至于时隔多个月之后第十一届蓝桥杯要开始报名的时候,我才敢面对他.报名第十届蓝桥杯的时候我大二,自我感觉学的不错,但事实并非如此,当入了那句话,学术不精 ...
- 2019第十届蓝桥杯C++B组题解(赛后重写的,不确保答案正确性,仅供参考)
先说一下这次的感受吧,我们考场比较乱,开始比赛了,还有的电脑有故障,(向这些人发出同情),第一次认真参加比赛,真正比赛的时候感觉没有那么正式,很乱,各种小问题,(例如博主就没找到题目在哪里,找到后又不 ...
- 2019第十届蓝桥杯c++A组省赛试题及个人解法
第十届蓝桥杯2019年C/C++ 大学A组省赛试题 2019年蓝桥杯第十届软件类省赛# C/C++ 大 学 A 组# 试题 A: 平方和#(暴力) 本题总分:5 分 [问题描述] 小明对数位中含有 2 ...
- 2022年第十三届蓝桥杯JAVA B组题目
第一次参加蓝桥杯,感觉一般般,手机没电导致只写了两个半小时就交了(不能重复交哎),没有检查,后面交卷后我还继续写了.静候结果吧,无论有没有拿奖,它促进了我学了很多算法,一两个月前还是只有语法基础的选手 ...
- 2023年第十四届蓝桥杯JAVA B组题目
第二次参加蓝桥杯,手机再次没电导致只写了两个半小时就交了(不能重复交哎),这次带了充电宝,结果充电宝充电线中途松了,不得不说腾讯会议的耗电量真大.本博客就是刚提交后写的,可以看看时间hhh. 就做了前 ...
- 第十届蓝桥杯java B组—试题D 数的分解
文章目录 1.大赛题目 2.文字描述如下 3.代码实例 4.答案 1.大赛题目 图片如下: 2.文字描述如下 试题 D: 数的分解 [问题描述] 把 2019 分解成 3 个各不相同的正整数之和,并且 ...
- 第十届蓝桥杯java B组—试题I 后缀表达式
文章目录 1.大赛题目 2.文字描述 3.代码实例 4.答案 1.大赛题目 图片如下 2.文字描述 试题 I: 后缀表达式 [问题描述] 给定 N 个加号.M 个减号以及 N + M + 1 个整数 ...
最新文章
- 在二叉树中找到累加和为指定值的最长路径长度
- html5的网页布局工具,HTML5网站响应式布局的主流设计方法介绍及工具推荐
- linux3.x内核实时性改进,linux 3.x内核优化指南
- Java方法的反射(对反射的进一步认识)
- MySQL之DQL(查询)语句
- Windows 11 来了!无缝支持安卓 App界面却像极了macOS
- 【分享】伙伴们!关注公众号要慎重!这半年我取关了很多,这几个留下了!真心推荐给你!...
- HDUOJ-------1753大明A+B(大数之小数加法)
- 【优化调度】基于matlab粒子群算法求解水火电调度优化问题【含Matlab源码 1181期】
- mysql的脏数据_数据库的脏数据问题
- ElementUI表单构建
- word自带参考文献标注功能
- spark+dataframe+小汽车摇号倍率与中签率分析
- 热门智力题 过桥问题和倒水问题
- TTL、Ping包最大字节数、网络时延、抖动、丢包率,看完瞬间变大神!
- iphone传输 android,安卓苹果数据互传,三种方法教你怎样把iPhone数据迁移到安卓手机...
- Microsoft Office Professional Plus 2013全套
- REST-HATEOAS
- 什么是软连接,以及软连接在linux系统中的用法
- spin()和spinOnce()
热门文章
- 用amd组装高档游戏型计算机,高配吃鸡真带劲!高端最新只选AMD游戏主机
- Conda太慢 试试这个加速工具
- 【有料】Java线程池实现原理及其在美团业务中的实践
- OSChina 周四乱弹 ——今天家里只有我和女室友,我想……
- 不可思议:99%的人不了解的真实中国历史
- layui之图片上传
- [M1]Daily Scum 10.9
- bugly android 错误不上报,Flutter Android 端集成 Bugly 的异常上报和升级功能
- PHP写一个简单的留言板
- Oracle | ORA-03135: connection lost contact.