洛谷刷题笔记

这篇博客是作者的洛谷刷题笔记,涵盖多个题目,包括P2700、P2827等,强调了反向思考在解题中的重要性,如最大生成树思路解决P2700,利用题目的性质简化问题,如P2827的蚯蚓切割问题。此外,还讨论了合并果子加强版的桶排序思想和CF1542B的数学分析,以及P7339和P7287的解题策略,涉及分治和二分查找的应用。
摘要由CSDN通过智能技术生成

刷题笔记

这里呢会有一些我认为比较提供思路,但是又不是特别重要的内容、

易错整理

1.。假如一个变量在循环里会变,那么这个循环的条件一定要想好是不是可以用这个变量
2。 一道题正着作难不妨想一想反着做

p2700

这个就是一个正着作难,反着好做,其实和星球大战很想,就是最大生成树的思路,每一次拿出的边看看左右端点的祖先是不是敌人,注意这里一定要是祖先,假如我们只对单独点去进行判断,那么在一堆我方点连在一起后,有连了一个敌人,那么这一个链都不可以连敌人了,所以一定是对于祖先的操作,最后并查集维护就好。

P2827

这是一道要去分析题目里面的信息的题目,其实我们最开始发现每一次切完蚯蚓后都要去给每一个加上一个数,但是这显然复杂度过高,所以我们就反着做,每一次把切开的数字减去要加的数,最后在记录一下一共要加几次(注意每一次找到要切的数的时候还要加上这个),现在对于这个的处理已经不是问题了,最后就是维护最大值,最简单的是用priority_queue但是复杂度显然会大,这是我们就要去发现题目的性质,** 假如两条蚯蚓最开始的长度a>b,那么a一定会先被切(显然),之后又可以轻易的发现这个a切完后的长度一定还是比b切完后的长,** 证明 假如a切成了 xa-----(1-x)a 在z回合后b被切
a的两个就变成了xa+bq------(1-x)a+bq;
b的两个就是 x(b+bq)-----(1-x)(b+bp);

	 			这里的他们被切开的那一段,不用加长度,可以相互抵消,就不理了。就类似会变为这样,然后显然就可以发现题目中自带的单调性,所以就可以用三个数组去维护,最开始的,第一个切开,第二个切开,最后在记录一共要加多少次就欧克了。

** 其实这道题告诉我们,要去发现题目的性质,和正难做就反着做,比如像是去边,和加法**

合并果子加强版

这个就是利用一下桶排序的思想,
** 就是假如这个数出现过,则tong[a]++就表示a这个数现在有一个,最后在去遍历每一个数就可以完美的排好序**

(显然,只适用于数据大小比较瘦小的题目),这个的话是比较快的,最后就只用维护两个单调对列,一个是之前的,一个是合并后的,其实也不用维护,因为合并后的肯定自己就满足单调性。

CF1542B

这是一道比较好的思维题,其实最开始我没有发现这个,首先他所谓的x可不只是1,而是衍生出来的所有的x,所以不可以单单的判断是否的a/b的倍数,之后我们就像一下这种方式得出的x的通式是啥,其实有两种
在这里插入图片描述
但是转化一下就是一种了

所以就看看n是不是1式

how----》 其实我们可以用一下简单的取模(毕竟有这么多的倍数,不取模是不是对不起这个形式)。
在这里插入图片描述
就好了,只要倍增的去判断,复杂度也可以接受。

P7339

这题本来我是想用贪心去完成,但是发现不但时间复杂度不好,而且wa声一片,就看了一看题解,终于理解了,首先贪心不对在于假如有a,b,c这三个选手,其中a是bc下一轮的敌人,之后看图
在这里插入图片描述
这样就反驳了贪心的做法

正解其实是分治,就是假如我们找出来最后可能获胜的所有人是不是就可以一波判断是否有1,那么我干什么是不是只用去递归找每一个赛区所有可能胜出的人,之后和另一个赛区去比较,同时淘汰人,如图

在这里插入图片描述

所以说做法就呼之欲出了,其实就是归并排序的思想,在排序的同时存下每一个可能获胜的人的编号,最后就只用遍历一遍答案数组,看看有无1就OK

代码中有注释

#include<bits/stdc++.h>
using namespace std;
void read(long long &x){
   
	int r=0;
	char s;
	s=getchar();
	while(s>'9'||s<'0') s=getchar();
	while(s>=
"Labuladong"是一个著名的算法题解博主,他的刷题笔记非常受欢迎。他的笔记具有以下几个特点: 1. 思路清晰:Labuladong的刷题笔记总是能够很清晰地阐述解题思路。他善于将复杂的问题简化为易于理解的小问题,并通过逐步引入关键概念和方法,帮助读者理解并掌握解题思路。 2. 逻辑严谨:Labuladong的刷题笔记经过深思熟虑,逻辑严谨。他会从问题的定义开始,逐步引入相关的概念和解题思路,循序渐进地解决问题。这种严谨的逻辑结构有助于读者理解和消化算法的核心思想。 3. 举例详细:Labuladong的刷题笔记通常会通过具体的例子来说明解题思路。这种举例的方式不仅能够帮助读者更好地理解解题方法,还可以帮助读者更好地应用这些方法解决其他类似的问题。 4. 知识点整合:Labuladong的刷题笔记不仅仅是一个题解,而是将相关的算法知识点整合起来,构建出一个完整的学习体系。他会引入一些底层的算法原理,将不同的解题方法进行比较和总结。这种整合的方式能够帮助读者更好地理解和掌握算法的本质。 总之,Labuladong的刷题笔记以其思路清晰、逻辑严谨、举例详细和知识点整合等特点,为广大读者提供了一种深入学习和理解算法的有效途径。通过阅读他的刷题笔记并进行实践,读者能够提高解题能力,并在面对各种算法问题时能够找到正确、高效的解决方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值