当前位置:网站首页 > Java基础 > 正文

蓝桥杯java基础训练



第一期: ✨ 二分(基础算法)

蓝桥杯4月8号就要开始了 ❗️ ❗️ ❗️

还没背熟模板的小伙伴们跟我一起来背模板吧 💪 💪 💪

祝大家4月8号蓝桥杯上岸 ☀️ ~

往期精彩回顾:

考点秘籍

蓝桥杯 Java 省赛 B 组(初赛)填空题

Java快读快写

java常用数组拷贝

常用Java竞赛基础技能总结

欢迎大家评论交流关注收藏~~~

众所周知,二分是蓝桥杯考查热点!

万物皆可二分!!!

下面让我们一起来背二分模板吧!

步骤总结

(1)确定左右边界

l=0,r=n-1

(2)二分

写法1:

 

写法2:

 

(3)二分的答案:L

注意:二分处理的是排好序的数组,如果是没有排好序的数组要先用sort()排序

根据题目要求进行变化

模板题:数的范围:
经典真题:
杨辉三角形
统计子矩阵

二分(开背)

 

模板背完后,做做例题吧 👊

🌟没时间解释了,快上车!蓝桥杯java基础训练;💫

例题:AcWing 800. 数组元素的目标和

二分

 

双指针

 

13届javaB组最少刷题数

分析

考点:前缀和+二分

来源

先背一遍模板:

前缀和:

 

二分

(1)情况1

 

(2)情况2

 

最少刷题数

题目描述:

对于每一名学生,请你计算他至少还要再刷多少道题,才能使得全班刷题比他多的学生数不超过刷题比他少的学生数。
全班刷题比他多的学生数不超过刷题比他少的学生数。
换句话说:全班刷题比他少的学生数>=(大于等于)全班刷题比他多的学生数

思路

不会就枚举,挨个去模拟样例,打暴力!
题目是死的,人是活的。
12
比他少的:6,10
比他多的:15,20
需要:0

10
比他少的:6
比他多的:12 15 20
需要:3

15
比他少的:6 10 12
比他多的:20
需要:0

20
比他少的:6 10 12 15
比他多的:20
需要:0

6
比他少的:
比他多的:10 12 15 20
需要:7
我们发现:
像10需要多刷3道题,变为13,将6、12包含进来
像6需要多刷7道题,变为13,将10、12包含进来

多刷题一定可以满足条件,但是少刷题不一定满足条件。

发现具有二段性,我们要找到的是最少满足条件的答案!

这时便想到了二分!

我们通过二分去二分出最少应该刷的总题数

怎么二分?

首先要满足的是题目所给的条件:
全班刷题比他少的学生数>=(大于等于)全班刷题比他多的学生数
那我们要怎么知道刷题数的人数?
数组存一下每种刷题数的人数
再用前缀和处理每段刷题数区间的人数
如果全班刷题比他少的学生数>=(大于等于)全班刷题比他多的学生数,说明不需要刷题,那么直接输出0即可。

剩下的情况需要二分:

当前刷题数
比他刷题数量多的人数即:

比他刷题数量少的人数即:

 

满足刷题数量比他多的学生小于等于刷题数量比他少的学生

我们需要继续寻找,缩小范围,即
直到找到最少满足条件的刷题数,二分停止。
其他的说明刷题数量不够,则需要往刷题数多的方向继续找:

二分到最说明找到最少应该刷的总题数
需要刷的题数(答案):应该刷的题数l-原本的题数p[i]

为什么需要减1?

因为,本来刷题数是小于的,包含在中。
现在变为
,所以需要减去之前在区间的自己。

Accode

 

参考资源

https://zhigeng.blog.csdn.net/article/details/?spm=1001.2014.3001.5502

求阶乘

考点:二分+反复整除法

分析

题目问我们的是满足N!的末尾恰好有K个0的最小的N是多少?

思路

阶乘数要想凑出来0必定是有若干个2、5
由于是阶乘2的个数必定是多于5的个数。
因此我们需要去枚举5的个数
没有思路怎么办?

暴力出奇迹,模拟过样例!

10!

 

10、5 总共是2个5

16!

 

15、10、5总共是3个5

25!

 

25、20、15、10、5总共有6个5
为什么是6个?
原因在于25可以被拆成5*5,总共是6个5。
所以我们需要反复整除5这样才能把边界值含5的个数全部统计出来
最后加上5的个数即可

又如一共是3个5等于
又如一共是个5等于

我们通过模拟可以发现:
我们直接对枚举到的数字整除5判断
输出能整除5是k的数字即可

但是看到k的上界为1e18直接枚举必定
题目要求满足N!的末尾恰好有K个0的最小的N
我们需要优化解决,当前N!恰好有k个0。
比N大的N!必定大于K个0,比N小的N!必定小于K个0。

我们直接想到二分来做这道题!!!

怎么二分?

不像最少刷题数那样,满足条件才能进行二分。
这道题直接枚举数字套模板进行二分即可。
因为题目问我们的是最少满足k个0的数字N是多少
不过最后还要检验一下二分出的答案是不是k个0

此外,这题需要考虑一些数据的细节

时间关系,具体看这两个大佬写的博客,写得很棒%%%
博客1
博客2

ACcode

 

提炼

反复整除法:得出某个数的阶乘含a的个数

 

参考资源

版权声明


相关文章:

  • java基础计算素数while2024-10-30 11:58:06
  • java map基础2024-10-30 11:58:06
  • java零基础鸡兔同笼2024-10-30 11:58:06
  • java基础数组习题2024-10-30 11:58:06
  • 学java基础框架2024-10-30 11:58:06
  • java以数组为基础实现列表2024-10-30 11:58:06
  • java编程ajax编程基础2024-10-30 11:58:06
  • java后端基础练习2024-10-30 11:58:06
  • java入门基础笔记2024-10-30 11:58:06
  • java基础程序填空题2024-10-30 11:58:06