题解
A.贪心
知识点:
结构体排序、优先队列(大根堆):priority_queue。可以去学学,链接:
我的思路:
因为是要抢救最多的建筑,比如(100,100),(50,101),(150,200)。我们可以一眼看出先修第2个,在修第3个的这种情况下是能抢救最多的,但是电脑不会懂,那我们如何操作呢?首先按t2从小到大排嘛,因为争取要在报废之前多修一点,然后在看时间,就是尽量在花费最少的时间内修完它,这样可以让效率最大化嘛。就像这个例子,我肯定是先修第2个因为只要50就行,而第一个它要100,这样我加上第三个需要的时间又可以刚刚好在第三个要报废之前修完它。简单来讲就是给计算机留一条后路,当它后悔选了这个可以不要它。
关键:就是拿当前的和已经选取的建筑最大的比较一下,看哪个划得来。
(那我是需要一个一个找当前已经选的建筑中最大的一个吗?当然不是这样太浪费时间了,我们可以借用大根堆)。
代码:
介绍一种快读方法,可以减少时间损耗。
B.字符串模拟
知识点:
c++中的string文件的find()函数。
代码:
C.模拟
知识点:
c++中的set文件。
auto链接:https://blog.csdn.net/weixin_43744293/article/details/117440727
D.数学
我的思路:
利用大三角形的面积等于2倍左三角形面积或右三角形面积来解。然后通过枚举X0的位置(0—Xc)来确定左边三角形的位置,如果不在的话再枚举右边(Xc—Xb)直到条件满足。
推导公式:
代码:
F.数学
我的思路:
要求l—r之间的和是否为3的倍数,可以利用等差求和公式sum = (l+r) * (l+r-1) / 2来解决。分别看看这两项是否有一项满足3的倍数就可。
代码:
E题暂存。。。。
G.贪心+模拟
我的思路:
5个人的一队之间安排一辆车,然后其余的队尽量凑满5人。
代码:
H.模拟
我的思路:
最大可能就是两个挂的最小值min(x,y),最小可能要么就是0(就是一个只挂高数,一个只挂大物),否则当挂高数和大物的人超过总人数时就只能是有人两门都挂了(x+y-n)。
代码:
总结:看到新解法可以去学学,学到了就狂赚。c++的stl真滴很好用。
(鼓励在评论区发表一下自己不同的解法,众人拾柴火焰高嘛!!!)