摘要:
这道题目是二分每一段的最大值的最小值(类似于贪)。主要在于check函数。 (check)思路: 输入一个每一段的最小值 然后看能不能实现。 接下来主程序可以套模板啦! 程序: 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int 阅读全文
摘要:
今天老师的代码里出了 故此纪念。 更新: colourful egg 光看题目:天书 听老师讲:1+1=2 阅读全文
摘要:
这道题目主要是dfs+记忆化搜索。 dfs就不说了,这道题的dfs只有mp需做一下处理其余没有区别。 重点是记忆化搜索:坑 1.需要两个vector来记录路径,因为只用一个的话会被盖,最后只剩下0和0还有0。 2.巨坑:起点可能是墙!!!!!!!!!!!!!!!!!!! 我也只是默默的掏出了板砖而已 阅读全文
摘要:
这道题目与抓牛类似,可以用bfs来解决。 细节: 1.记录step 1 np.step=op.step+1; 2.扩展 这里不同于其他题目,但只要按题意来写就不会有问题。 👇 (一) 1 np.x=op.x+op.y; 2 np.y=op.y; (二) 1 np.x=op.x; 2 np.y=op 阅读全文
摘要:
这道题目是二分舞台大小,为什么能用二分呢?因为如果mid成立 则mid~r都成立,如果mid不成立l~mid就都不成立,也就是严格单调,所以可以使用二分快速找到k。 check函数的思路: 实现:在舞台为k的情况下表演时间能否满足tmax。 思路:1.先给舞台上放k头牛按表演时间排序 2.然后将余下 阅读全文
摘要:
此题又臭又长,意为:拿n个扑克牌搭个最大三角形以此类推,问能搭多少个? 这题为难亿点的二分 主要是高度二分,用目前扑克牌数当右边界,1当左边界。这里有个细节,r=扑克牌数,l=1,因为为了保证有答案所以这么写。然后就是模板了。 int l = -1,r =N; while(l+1!=r) { m=( 阅读全文
摘要:
这道题目是经典二分只是二分中对于mid的判断变了,可以直接套模板。 1 int l = -1,r =N; 2 while(l+1!=r) 3 { 4 m=(l+r)>>1; 5 if(check(m)) l=m; 6 else r=m; 7 } 8 return l or r; 上代码: 1 #in 阅读全文
摘要:
这道题目亿看就是二分,因为假设间距为n,能满足要求,那么比n小的数一定能满足要求。反正,n不能满足要求,则比n大的数一定不能满足要求,所以可以用二分来找到最大满足要求的间隔。 int l = 1,r = a[N];//针对此题目l与r应当做出相应调整。 while(l+1!=r) { int m=( 阅读全文
摘要:
道题目就是二分而已,大体都一样,只是有一个小细节值得注意,在后面ans累加时需要分几种情况: 1.b[i]<=a[1],说明这个童鞋没好好复习,挂科了。 2.b[i]>=a[n],说明这个童鞋是个学霸。 3.else情况,说明这个童鞋不像前面两个童鞋不是挂科就是实力爆表,是个普通人。 程序: 1 # 阅读全文
摘要:
又是被迫营业。 这道题目很简单但我错了 二分模板题. 1 int l = -1,r =N; 2 while(l+1!=r) 3 { 4 m=(l+r)>>1; 5 if(check(m)) l=m; 6 else r=m; 7 } 8 return l or r; 这个模板有几亿个细节值得注意: 1 阅读全文