2022.7.14 单南松 讲课纪要
前言
7.14 初中班搞了一场模拟赛,天天被高中学长们虐都快被虐炸了,就去初中班参加考试去了。
考前 ghc 学长跟我说“T3 2048”。2048是啥?不知道,就去查了一下,是个游戏,然后学了学怎么玩(话说这种游戏还有人玩)。
下午就去玩去了,上来秒切T1,然后T2写了个dp,T3真考了2048,巨模拟!肝完之后做T4,瞪了20分钟不会做。后来就开始想他们初中班都讲啥了,毕竟就讲了那么几个算法,筛一筛......
然后就用二分给切了。
最后出分的时候T2只有40分了,虽然Rk.1,但感觉没什么价值。。。。毕竟没有AK
赛后就让我上去讲T4【话说我tm讲个这讲了20分钟】
题目大意
豪华礼包:一个 \(U\) 盘、一个鼠标和一个机械键盘。
幸运礼包:一个 \(U\) 盘、两个鼠标。
普通礼包:两个 \(U\) 盘、一个鼠标。
卖店内准备了 \(a\) 个 \(U\) 盘、\(b\) 个鼠标和 \(c\) 个机械键盘。相邻两位领礼包的顾客拿到的礼包类型不同,求最多可以发出多少份礼包。
组数 \(T<=10^5;a,b,c<=10^6\)。
正文(讲课原话)
首先我先来说一下这个题所涉及到的算法,二分,相信大家都学过。对于咱们现在这个阶段来说,二分就要找到 l,r,mid
,那么这个题就做的差不多了。mid
很好说对吧,大部分都是 mid=l+r>>1
或者 mid=(l+r)/2
。所以只要知道 l,r
就行。这个题很显然 \(l=0\)。所以就要找 r
,没猜错的话那些写了这个题然后挂了的八成就是找不到 r
了,那么这个 r
在哪里呢?\(r=a+b+c\),然后主程序就解决的差不多了,剩下的就还是那些二分经典套路。
其次,check
函数怎么写,很重要,这里我们可以进行单方面的对 false
进行考虑,没有满足 false
的条件,就返回 true
。之后首先就是 \(a<mid,b<mid\) 要返回 false
。以及手动存储三个数,分别表示 mid/2
和 a-mid,b-mid,c
的较小值。最后根据题意进行三者比大小即可。这个题就做完了。
“我有个问题,为什么要比大小”
“我觉得你再看一遍题就会了”
几分钟后.........
“懂了吗?”
“没有。”
“你们看懂这道题在让干什么了吗”
“没有。。。。”
“.......”