自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(217)
  • 收藏
  • 关注

原创 【总结】 2019的愿望与对一些算法的总结

转眼间,又是一年过去了。2019终于变成了历史,却仿佛还在昨天。与伙伴们在机房所经历的酸甜苦辣,也终于洗涤了我们的心。一切似乎都平静了,名次似乎都变得不那么重要,重要的是努力的过程,不是么?虽然有些天赋好的大佬在机房不停水沝淼㵘,仍然能获得一等奖,但他们,却失去了拼搏的快乐,终究会被淘汰。好久没写总结了,现在就在这里总结一下2018的收获与失败吧。2018,确实是收获非常大的一年。在2018...

2019-03-01 20:57:43 313 5

原创 本蒟蒻在编程时遇到的一个问题,希望大佬能够解答!

我在写程序时讲一个代码交了上去,结果是RE(Runtime Error),调了接近两个小时后,实在没法子,就将变量的顺序交换了一下,结果却AC(Accepted)了?这是为什么?我今天问老师的时候,老师也表示不知道?在网上查时,网上的解答也是云里雾里的,并没有具体的解释。难道是c++内置的错误?那我们NOIP考试时不知道怎么办?对于这种情况出现的问题,希望看到本篇博客的各位大佬们在留言区能...

2019-02-15 20:48:14 410 3

原创 【题解&&单调队列优化dp】划分

去记录可以转移到j的最近的位置(由于是越近越优,所以转移过来的最近点是唯一的),然后由这个位置直接判断当前转移是否合法即可,(也就是说,随着i的增大,可选的j的集合是在上一个i的基础上不断变大的(性质1)而状态2其实就是满足了我们可以用当前优秀的决策点去替换之前更劣的决策点的性质。性质1其实保证了决策点的单调性,当前的决策点可以由上一个决策点的状态继承。对于这道题而言,就是说,如果有两段,这两段的存在是合法的,那么就。显然是不要的,应用那个性质,我们只需要取找离i最近的满足。个位置,且上一个位置是。

2024-09-11 17:36:05 732

原创 【CF补题&&数学&&裴蜀定理】 div969 C Dora and C++

他们的差值最小值也就是取模意义之后两数的差的绝对值。我们想要通过如下操作使得他们的差变得尽可能小。比如取模意义后两个数变成0和2,而gcd=3。其实就是说,x和y在这个条件下可以等价于。那么对于这道题而言,最小的差值就是每个数。也就是说通过这个操作得到的数,一定是。实际上可以让0+3,再和2去做差。这个其实就类似于一个环形的问题。根据裴蜀定理,我们知道。跨越之后可能让差值更小。这个操作也就是相当于。

2024-09-03 14:51:25 882

原创 【过题记录】8.6 (牛客,hd补题)

让这个点一直跳父亲,知道这个父亲在集合内,这就是刚好包含这个点的一条路径,同时将路径上的点放入集合内。想要求解这个问题,我们首先以0号点对应节点为0做一个树形dp求出每个子树内的联通快的数量。但是这个时候,我们想要选取这些点,是不是就意味着,我们就必须选择这些点?但是要注意最后如果所剩的小于m个了,就不能再继续创造。所以利用这些包含性质,这个问题的答案就可以变成。所以我们就找一条路径,使得这个路径包含这个点。对于之前的答案,我们对于路径上的点,都是乘以。一个数MEX=x的贡献就是x*NUM(x)

2024-08-06 22:15:06 633

原创 【过题记录】8.4(robocom补题,网络流)

如果最后对于一个点i,d[i]不为0,说明这个点在分层图中出现,并且用上了。其实就是一个求最大子矩阵和的板子题。这里最大流用的是dinic算法。一道最大权值闭合图的板子题。今天robocom国赛,压成一维后利用最大子段和。那么就说明这个仪器用上了。利用最大子段和的思想。

2024-08-04 22:37:26 737

原创 【过题记录】 8.3

上次比赛碰到了网络流,发现还没点,今天只做了几个网络流的板子。补一下昨天的,晚上头痛就先回去了。

2024-08-04 12:13:12 481

原创 【过题记录】 8.2 hddx

3、将所有数先按照操作1能变0的变成0,再按照1,2操作讨论。因为对于0而言,他没有赠送的情况(只要摇到n就直接胜利)关于正确做法,发现零号点和其他几个点是不一样的。而且我们发现,想要变0,只有操作1能让数变0。的情况是:有一个数为其他所有数的公因数。我在考场上手莫了n=2和n=3的情况。将他们一直/2,直到有一个数为奇数。唯一要讨论的就是三个偶数的情况。然后再按上面的奇偶性讨论即可。他们花费1代价走到n的期望是。,使x为其他所有数的因数。2、能找出一个数x,使得。为其他所有书的公因数。

2024-08-02 22:32:30 969 1

原创 【过题(补题)记录】8.1

找出这棵树的直径,将直径的一端作为根(其实只要层数>=4都行,为了方便直接求直径即可)而是因为用直径跑出来的树的深度更深,也就不存在不符合要求的可能。其中之一的方案就是将这几个树的直径一次首尾相连变成一棵树。这是赛时的代码,唯一区别就是把cin改成了scanf。因此,只要不是菊花图,一定能找出一种方法,遍历这个图。他有若干层,每一层之间的儿子之间显然是没有连边的。偶数层,再走1,3,5。经过每一层的同时,在将这一层的节点遍历完即可。如果树的直径>=4,答案显然是可以的?这样,就能不重复的经过每一层。

2024-08-01 22:11:30 419

原创 【根号分治】 通知

有一点需要注意的是,如果当前点想清空,由于当前点的贡献是直接贡献加关键点贡献,所以我们应该是让直接贡献变为-关键点贡献,这样才能将全部周围的点的贡献都清空。对于暴力修改而言,关键点的复杂度是较高的,而非关键点暴力修改的复杂度可以接受。所以对于一个修改,如果当前点是非关键点,我们就暴力修改周围的点。那么查询一个点的贡献,就是当前点的直接贡献以及周围关键点的贡献。如果当前点是关键点,我们就打个标记,表示当前关键点又一次修改。我们考虑如果暴力修改,复杂度是。考虑根号分治的思想,我们令。,其实m为这个点的度数。

2024-07-31 22:04:31 324

原创 【过题记录】7.31(树形dp,根号分治)

这就决定了,我们如果想将子树x的灯全都打开,要么就是先开左子树的灯再开右子树的灯,那么就是反过来。其实,由于我们和敌人这时是同步走的,所以如果敌人不扣血,我们和敌人之间的位置差是一定的。这个意思是,对于每一个y,他转移过来的对应的x都是一样的,就是那个最小值对应的minx。同时当前的状态只能通过前一轮的状态转移过来,所以第一维我们又可以通过滚动数组去优化。表示敌人的位置跟初始时候想比,x偏差了delx,y偏差了dely时的方案数。这个子树是怎么跨的呢?表示以u为根的子树,当前再叶子结点x结束的最小贡献。

2024-07-31 21:33:39 570

原创 【过题记录】7.30 (牛客,杭电补题,树形dp)

从前往后遍历,如果当前的数比后面的小,就调整到两个数的绝对值不超过1(前面大于等于后面)看当前人有几个比对面大的,这些肯定可行。不断纠正,直到不可纠正为止。先写这些,后续的后面补上。

2024-07-30 17:24:19 183

原创 【过题记录】 7.29 (杭电,环形dp)

对于位置i,在set里面从小到大找j,直到找到满足条件的j即可。注意到本题的数据是均匀随机的,而质数的密度在随机的情况下约等于。表示前i个时刻,睡了j分钟,当前分钟睡/不睡的最大值。对于随机均匀生成的数据,可以用期望次数去理解。我刚开始选择了第一种,但是发现转移会有问题。又由于数据随机分布,所以根据质数密度,每。表示前i个时刻,睡了j分钟的最大值。所以这次我们选择第二种,强制连接。第一种是倍长,第二种是强制连接。首先,本题要我们求最大的最小值。拿到这个题,我的第一想法是设。也就是说,强制让n和1连接。

2024-07-29 23:05:25 1021

原创 【过题记录】 7.28 (树上dp,背包,换根,基环树)

然后我们发现,如果能调整高度,肯定是要调整尽可能高的那条边,因为这条边调整之后,他所属的叶子节点的深度全部都会加1。于是我们发现,一条边所能调整的最大值,一定是他全部儿子节点所需调整的最小值。首先,所有叶子节点的高度肯定就等于最深的那个叶子节点的深度。这样经过一遍dfs之后我们可以计算出每个叶子需要增加的高度。在通过一遍从下往上dfs可以求出每条边调整的最小值。表示以i为根的树,选j个观众所能获得的最大金币值。且不可能去调整最深的叶子结点的深度了。不难发现,中断点就是叶子节点,比较明显是一个树上背包问题。

2024-07-28 17:07:48 411

原创 【过题记录】 7.27

由于子集是满足前缀性质的,所以当你枚举目前大子集的时候是包含小子集的答案的(类似于树状数组的思想)对于一个点,如果他想要从某个点比特跳跃跳到当前点,一定是从他的子集跳过来。我们还需要将当前点的最短路跟从他子集中的最短路比特跳跃过来的值进行比较。maxx-minx是按照-2,-1,0,1,2的斜率顺序变化的。所以1号点到每个点的最短路径上肯定最多只有一个比特跳跃的边。我们可以画出(maxx-minx)关于时间t的函数图像。这个时候,已经初步得到了1号点跟其他点的最短路径。由于刚开始的图可能不一定是连通图。

2024-07-27 21:26:11 189

原创 【过题记录】 7.25

对于一个相邻的区间而言,一次操作实际上就是将小的区间翻转到大的区间里面,这个时候原本长度为(x,y)的区间就变成长度为(x,y-x)的区间。表示到x号节点,不合法的左边路径有i条,不合法的右边路径有j条的最小值。对于一个人,找到他往后的最早出现的非法位置,后面所有的串都是非法。我们发现树的路径其实是一条链,而链与链之间的答案不会产生影响。所以我们可以采纳类似滚动数组的方式,尽可能高效的利用每一个空间。或者说,一个点的左子树以及右子树的答案之间不会有影响。所有的方案减去非法的方案就是合法的方案。

2024-07-25 22:46:07 1071

原创 【动态规划】 Treasure Hunting

这个时候我们发现,由于我们处在第i行的时候,我们需要把这一行的宝藏全部拿掉,所以我们只需要关心第i行最靠左/右的宝藏位置即可。还有一点需要注意的就是如果当前位置没有宝藏,那么当前位置就继承上一个位置的宝藏,同时步数+1,意思就是上一层的宝藏往上平移。还有一点就是传送阵的位置,对当前位置,需要枚举里当前位置最近的左/右传送阵的位置,一次从前面的位置转移过来。这意思是,当我们走到第i行的时候,第i行之前的宝藏已经全部被拿掉了。当我们走第i行的时候,我们也需要把第i行的宝藏全部拿掉。细节有点多,代码量有点大。

2024-07-24 16:29:07 324

原创 【过题记录】 7.24

对于每一轮,我们对于每一个位置可以二分/倍增出相应的胜利位置,以及记录当前0/1的胜利情况。而后对于每一个位置,我们对于局数b进行倍增,找出对应的位置以及0/1的胜负情况。不难发现,将所有人都送往对岸的最小趟数是S=思路比较好想,代码细节挺多,实现有点难度。而一趟至少要有l个人会消耗一次趟数。每次我们选择最大的l个人的趟数-1。也就是每一趟都有人能过河,直到最后。所以总的趟数代价就是S*l。所以能够运送的必要条件是。算法:贪心,数学归纳。

2024-07-24 14:34:19 545

原创 【过题记录】 7.22

今日主要是杭电多校今日一共过了6题。

2024-07-22 22:40:41 506

原创 【状压dp】 Cunning Gena

采用滚动数组的时候需要注意,我们在当前这轮状态的时候很可能还保留着前一次状态的信息,所以我们每次重启一轮,都要重新赋值,放置前一轮的信息对这一轮产生影响。第i个人的解题状态我们也用一个状压数组去表示(假设为s[i])我们将人按照显示器从小到大排序,然后显示器的数量就有了单调性。对于第i个人,当前的答案就是f数组的答案加上显示器的答案。由于当前只和前面一维有关,所以我们可以采用滚动数组。但是这道题还有一个需要注意的点就是显示器的问题。表示前i个人,组成解决问题的状态为j的最少花费。所以我们从前面往后面转移。

2024-07-21 21:50:04 997

原创 【题解 && Kruskal重构树 && LCA】 星际导航

如果x和y不连通,说明我们这个时候甚至找不到x和y的一条路径,也就无法求最大边的最小值。因为如果我们不要这条边,而选择后面的边,让x和y能够连通,后面的边显然都比他大。首先我们明白,两个点之间的路径,其实是一个生成子图,或者说生成子树。想要最大边最小,其实感性理解一下,就等价于让两个点连通的代价最小。因为这是让x和y连通加入的最后一条边,前面的加边都比他小。于是两个点之间的最大边权就变成了重构树上的LCA的点权。我们回想最小生成树的思路,这个时候有两个点x和y。也就是x到y路径上的最大边的最小值。

2024-07-21 16:58:08 1069

原创 【过题记录】 7.21

模拟一下他的运行过程就会发现,两次之后整个数组就固定了,之后每次都是每个数往后移动一位,可以模拟两次之后计算每个数的存活轮数,计算贡献。算法:思维,前缀最大值。

2024-07-21 14:08:41 245

原创 【过题记录】7.20

这就启发我们,对于每个大线段分别跑一个dp,合并在他内部的小线段。而后对于每一个大线段,再跑一个总的dp即可。也可以只跑一遍dp,有一个小trick,在线段两端添0,这样答案就等同于f[0]其实这就是一个线段覆盖问题,只不过大线段能够包含小线段。

2024-07-20 15:02:22 274

原创 【过题记录】 7.17

算法:并查集(带权并查集||扩展域并查集)

2024-07-17 19:33:43 734

原创 【过题记录】 7.16

算法: 组合数学。

2024-07-16 22:03:16 998

原创 【过题笔记】 7.15

算法:动态规划。

2024-07-15 20:30:55 771

原创 【题解 && 拓扑思维】 C - Building Company

模拟拓扑结构,从当前队列中拥有的工位出发,将当前工位堆中能处理的工作全部处理完,同时记录一下如果当前工位是当前项目所需要的最后一个工位,那么就将当前项目所能获得的新工位放入队列中继续拓展。对于每一个项目的几个条件,我们其实可以当作一些约束,当这些约束全部满足,那么就可以加入新员工继续拓展。对于每一个项目,需要满足几个条件,对于每一个条件,表示为第i项工作需要有几个人做。对于每一项工作,我们开一个堆,记录当前工作需要的人数以及当前的项目的编号。这几个条件全部满足后,这个项目就可以收入囊下,同时获得新的员工。

2024-01-31 12:37:22 395

原创 【题解 && Trie树 && 字符串】 C - New but Nostalgic Problem

这个时候就没有上述的限制了(每种只能取一个),我们每种可以取若干个,同理,我们也是从小到大枚举,找到合适的那个字符(第一个字符串的和>=k的地方),而后按照上述的方式检验是否可行即可。首先,答案已经确定了至少有abc,也就是说目前挑选出的几个字符串中都是以abc打头的,可能就是abc,也可能是abc[a-z]当cnt1+cnt2>=k时,说明我们能找出至少k个字符串,使得他们的前缀是abc,这个时候答案确定。所以,在答案不改变的情况下,我们对于每种情况至多只能取出一个字符串。什么情况下,答案是abc呢?

2024-01-19 16:36:28 430

原创 【题解 && 优化dp】 B - Base Station Construction

我刚开始其实想从线段入手,但是发现重叠的部分根本不好处理,以至于我被卡了思路,一直到结束。这样表示显然是没问题的,因为除了第一个基站,其他基站的设立必定是存在上一个基站的。表示必须在第i个点建设基站,并且i号点之前的线段全部满足要求时所需要的最小代价。我们注意到题目要求:每一条线段上都必须要有一个基站存在。但是这个j显然不能乱找,怎么样去找这个j才是合法的呢?当dp状态设定不好的时候,我们不妨从最简单的部分出发。建基站的位置(注意,是上一个!这个j的位置显然是需要经过预处理的。一个是点,一个是线段。

2024-01-19 14:17:34 526

原创 【蓝桥杯 && LCA && 差分】 砍树

这道题还是比较裸的一道书上差分的题目了对于每一对标记点(x,y)他们之间的路径就是x−LCAxy−y这条路径上的每一条边都要经过。那么对于一条边,什么时候砍掉这条边的时候,这几对点互相到达不了呢?那就是这条边是这m条路径(一共m对点,每一对点都有一条路径)的公共边也就是说这条边被经过了m次因此,对于每一条边,我们用一个数组记录这条边被经过了几次最后经过次数为m的边就是可以砍掉的边,最后取一个max即可那么我们如何累加边经过的次数呢。

2023-11-28 22:03:10 507 3

原创 【面向对象】代码存一存

【代码】【面向对象】代码存一存。

2023-11-09 16:45:53 266

原创 【题解 && 堆】 [蓝桥杯2023初赛] 整数删除

你删除一个数之后,当前数左边和右边的两个数会加上当前这个数,你虽然把这两个数放到了堆里面,但是这个堆里面仍然存在着未加上被删数的这两个数。但是我们知道这两个数实际上已经不存在了,已经变成新的加上被删数的两个数了。如果当前数被加上了新的数,那么加入堆之后就让这个位置的时间戳+1,最后取出堆顶元素的时候只需要比较当前堆顶元素的时间戳和当前位置的实际时间戳是否相同即可。每次取出堆顶元素删除,而后将他的前一个以及后一个元素的值加上他的值就可以了。我们用堆记录当前的最小值以及当前值所在的下标。

2023-11-08 22:17:11 408

原创 [蓝桥杯 2022 省 A] 推导部分和

对于一个长度为N的整数数列A1​A2​⋯AN​,小蓝想知道下标l到r的部分和il∑r​Ai​Al​Al1​⋯Ar​是多少?然而,小蓝并不知道数列中每个数的值是多少,他只知道它的M个部分和的值。其中第i个部分和是下标li​到ri​的部分和∑jli​ri​​Ali​​Ali​1​⋯Ari​​, 值是Si​。

2023-11-05 23:07:00 992 3

原创 【题解 && 线段树】[蓝桥杯 2022 省 A] 选数异或

给定一个长度为n的数列A1​A2​⋯An​和一个非负整数x, 给定m次查询, 每次询问能否从某个区间lr中选择两个数使得他们的异或等于x。

2023-11-02 11:29:04 461

原创 【实验五】题解

我是敦立坤的爹!!!一个整数集合中含有n个数字,每个数字都在0n的n+1个数字中有且仅有一个数字不在该集合中,请找出这个数字。

2023-11-01 17:02:10 841 4

原创 【第七章作业】题解

定义一个包括年、月、日的结构体变量,读入年、月、日,计算该日在当年中是第几天。注意闰年问题。请写一个函数days实现计算,将读入的结构体变量传递给days函数,计算后将答案返回给main函数进行输出。

2023-11-01 15:25:09 320

原创 【第六章作业】题解

下面代码仅供借鉴,并不是唯一正解!有些同学的方法比我巧妙的多!

2023-10-31 22:19:41 498 1

原创 【题解 && 单调队列优化dp】 简单的加法乘法计算题

那么对于第一种方式,我们发现这是一段长度固定区间里的最小值。对于第二种方式,由于m最大只有10,所以我们可以暴力转移。由于对于每一步而言,我们都需要的是最小步数。我们可以考虑滑动窗口,即单调队列去优化dp。线段树常数太大,会t,不建议使用。表示达到i时的最小步数。

2023-10-24 20:21:17 209 2

原创 【题解 && 树形dp &&拆位】 树上异或

给定一棵包含n个节点的树,第i个点有一个点权xi​。对于树上的n−1条边,每条边选择删除或不删除,有2n−1种选择是否删除每条边的方案。对于每种删除边的方案,设删除后的图包含k个连通块,定义这个方案的权值为图中连通块点权异或和的乘积。形式化地说,若这张图包含连通块C1​C2​Ck​,其中Ci​是第i个连通块的顶点集合,设vi​⨁u∈Ci​​xu​,则这个方案的权值为v1​×v2​×⋯×vk​。求这。

2023-10-21 23:54:47 184

原创 【题解 && 动态规划】 Colored Rectangles

乍一看我还以为是贪心!猫 想想感觉没问题但是局部最优并不能保证全局最优比如这组数据如果按照贪心的做法,答案是20*20*2但是其实答案是19*20*4因此这道题用贪心是不对的于是我们考虑dp可以观察到这道题的n非常小只有200这就暗示我们这道题可以用n3的做法去解决那么我们就可以这样设dp状态fijk表示用三个颜色分别用了前ijk个数,所能获得的最大价值如何转移呢?考虑一次可以取两个数也就是说可以取12,23,13。

2023-10-03 20:08:39 241

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除