![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
蓝桥杯
文章平均质量分 62
zhangkai_forever
这个作者很懒,什么都没留下…
展开
-
(五)二分法
1e-7表示10^-7,也可以用for循环来写,直接100次二分,一定会分到一个极小区间,但这个100不能滥用,达到精度即可,否则会超时。如函数在区间[1,10000]内单调,要求根的精度10^-8,那么由10000/2^n原创 2023-03-22 16:32:22 · 1994 阅读 · 0 评论 -
(四)搜索
把空盘看成 0,那么一个圆圈上有 9 个数字 {0,1,2,3,4,5,6,7,8},拉直成了一条线上的 9 个数字,这条线的首尾两个数字处理成相连的。另外,如果不去重需要跳4^20次,因此需要做去重,如果跳到曾经出现过的状态,就不再继续搜索,一共有9!如果反过来看,让空盘跳,跳到蚱蜢的位置,就简单多了,只有一个空盘在跳。DFS连通性判断:图论的一个简单问题,给定一张图,图由点和连接点的边组成,找到图中互相连通的部分。用队列实现,从起点出发,按层次从近到远,逐层先后搜索,先搜到的层离起点更近。原创 2023-03-20 13:17:00 · 66 阅读 · 0 评论 -
(三)递归与递推
所以,我们可以根据要找的格雷码,找到其在上面一层中的“父亲”,利用递归法可以找到每个格雷码形成的路径,在回溯的过程中,修改字符串str就可以还原出n位中的第k号格雷码。以三位格雷码为例,前4个是由第0~3个两位格雷码在前面加0,后4个是由第3~0个两位格雷码在前面加1得到。本题也是一道组合算法题,000~111三位数,相当于是从3个里面随机抽取,0表示没选取,1表示选取,那么它应该是上一排中的(2 ^ n)- 1 - k号格雷码前面加“1”变成的;那么它应该是n-1位中的k号格雷码前面加“0”变成的;原创 2023-03-11 19:56:27 · 160 阅读 · 0 评论 -
(二)枚举与尺取
java中没有C++STL中的next_permutation方法,手动实现全排列的代码,有些情况下要用到。只含因子3 5 7,即3^i*5^j*7^k,尺取法即双指针法,有同向和反向两种扫描方式。从{1,2,3,4}中选3个的排列,接替过程如下,但运行结果显示超时。本题用同向扫描,滑动窗口法。手写排列代码(暴力法)手写排列代码(暴力法)原创 2023-03-06 16:29:08 · 229 阅读 · 0 评论 -
(一)杂题—简单计算与模拟
本题求的是如何付款使方差最小,方差意味着一组数据的平稳程度,直接思路是这n个人,如果带的钱不够平均数,需要把钱全部付掉,那后一部分人,如何付款让方差最小?题目规定n≤5×10^5,0≤ai≤10^9 ,2的10次幂约等于10的3次幂,2的32次幂约等于10的9次幂所以用int定义n,long定义存放ai的数组a,剩下那部分带钱多的,不管怎么摊他都有富余,所以对于这部分人,付款数是剩余付款数平摊。前一部分人带的钱不够,需要从总付款数S中扣掉他们的钱,得到剩余付款数S',其中有几个细节提一下,原创 2023-02-28 16:27:07 · 92 阅读 · 0 评论