<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[2301_80311539的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/2301_80311539</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; 2301_80311539]]></copyright><item><title><![CDATA[20250807]]></title><link>https://blog.youkuaiyun.com/2301_80311539/article/details/150006387</link><guid>https://blog.youkuaiyun.com/2301_80311539/article/details/150006387</guid><author>2301_80311539</author><pubDate>Thu, 07 Aug 2025 21:17:46 +0800</pubDate><description><![CDATA[该代码解决了一个关于图连通性的问题。它使用并查集(DSU)来处理两个森林结构，计算需要添加的边数使整个图连通。首先读取节点数n和两个森林的边数(m1,m2)，然后初始化两个DSU结构。对于第二个森林的边进行合并操作，统计第一个森林中与第二个森林冲突的边数(cnt)。最后通过比较两个森林的连通分量数量(cnt1, cnt2)，输出需要添加的边数(cnt + cnt1 - cnt2)。代码通过预处理和并查集操作高效解决了问题。]]></description><category></category></item><item><title><![CDATA[20250806]]></title><link>https://blog.youkuaiyun.com/2301_80311539/article/details/149960118</link><guid>https://blog.youkuaiyun.com/2301_80311539/article/details/149960118</guid><author>2301_80311539</author><pubDate>Wed, 06 Aug 2025 19:42:09 +0800</pubDate><description><![CDATA[我们观察最后一个样例得到第一个1的贡献是 (2^1 - 1) + (2 ^ 2 - 1) + (2 ^ 4 - 1) -> 2^1 + 2^2 + 2^4 - 3。因为这个题给的简单版本-我反正觉得是这样，那么我们就能很快的分析出来合法的序列一定要以1开头以3结尾，并且中间的数值只能全为2，然后每一对13能贡献的的个数就为 2^n-1 n为13中间2的个数。但是问题是我们的1 3如果暴力遍历的话，时间复杂度就去到了n^2，这样是不行的，那么就需要优化中间的过程。增加了一个数位dp的记忆化搜索的学习。]]></description><category></category></item><item><title><![CDATA[20250805]]></title><link>https://blog.youkuaiyun.com/2301_80311539/article/details/149930180</link><guid>https://blog.youkuaiyun.com/2301_80311539/article/details/149930180</guid><author>2301_80311539</author><pubDate>Tue, 05 Aug 2025 20:46:30 +0800</pubDate><description><![CDATA[*能很明显的知道这个肯定是要用dfs的，并且需要分块做，但是对于自己来说最初就是不会写，看了题解的我们将这个矩形分成2 x 2的四宫格，然后依次类推。那么我们就能根据边长len算出每一个四宫格的范围，然后递归的时候就要加上这个范围值对于op1 -> 查询(x, y)对应的值：因为我们有了这个横纵坐标，那么我们就能直接判断这个坐标在整个大矩形里的哪一个矩形中，如果在左上，那么就要加上左上的偏移量LU, 右下就要加上右下的偏移量RD以此类推。]]></description><category></category></item><item><title><![CDATA[20250804]]></title><link>https://blog.youkuaiyun.com/2301_80311539/article/details/149908630</link><guid>https://blog.youkuaiyun.com/2301_80311539/article/details/149908630</guid><author>2301_80311539</author><pubDate>Tue, 05 Aug 2025 08:49:39 +0800</pubDate><description><![CDATA[如果我们要插入一个最小的数，那么肯定是b数组中的数，因为这样才能保证最小，但是如果插入了之后要保证所有的b[i]都能得到匹配的话，那么就要保证插入位置的数的前面的所有数能得到匹配，后面所有的数也能得到匹配，这样在这个位置插入一个数才是合法的，那么我们就可以维护一个pre,erp前缀匹配数和后缀匹配数，然后判断前后缀相加是否为m-1即可。根据题目我们可以知道的是，奇数的数目会比偶数多一个数，但是我们要求得缺的那个数要满足不能重复的条件。根据题目的意思可以明显的知道如果最后一个可以匹配的话那么答案就是0。]]></description><category></category></item><item><title><![CDATA[20250724]]></title><link>https://blog.youkuaiyun.com/2301_80311539/article/details/149604682</link><guid>https://blog.youkuaiyun.com/2301_80311539/article/details/149604682</guid><author>2301_80311539</author><pubDate>Fri, 25 Jul 2025 17:05:37 +0800</pubDate><description><![CDATA[【代码】20250724。]]></description><category></category></item><item><title><![CDATA[20250723]]></title><link>https://blog.youkuaiyun.com/2301_80311539/article/details/149566649</link><guid>https://blog.youkuaiyun.com/2301_80311539/article/details/149566649</guid><author>2301_80311539</author><pubDate>Wed, 23 Jul 2025 20:50:20 +0800</pubDate><description><![CDATA[满足2的指数和为12、3的质数和为4均为偶数。但是如果lena < lenc的话，我们现在得到的是lena = lenb，所以每次操作的时候只能通过有限的b来操作a,显而易见的是我们操作完一次a之后是要 a <<= 1的，那么我们可以每次控制a的某一位在移位前和对应c的最终位相匹配，那么我们就能在lena = lenc的时候将大于lenb的部分使a c一样，然后在用同样的手法操作a。我们可以发现的是，我们要讨论数能不能化为一样的，要讨论他的质因数，那么我们可以用nlogn的方法把每个数的质因数筛出来。]]></description><category></category></item><item><title><![CDATA[20250722]]></title><link>https://blog.youkuaiyun.com/2301_80311539/article/details/149546253</link><guid>https://blog.youkuaiyun.com/2301_80311539/article/details/149546253</guid><author>2301_80311539</author><pubDate>Wed, 23 Jul 2025 10:02:06 +0800</pubDate><description><![CDATA[签到题/*如果最开始就存在a + 1个连续的0的话，那么我们肯定可以将其变为1如果存在a个连续的1的话，那么我们就可以通过变0变1将他们扩展，然后直到所有的都为1所以只要有a个连续的1或者a+1个连续的0，我们都可以将所有的都变为1，否则1的个数就是原本的个数*/]]></description><category></category></item><item><title><![CDATA[20250721]]></title><link>https://blog.youkuaiyun.com/2301_80311539/article/details/149501884</link><guid>https://blog.youkuaiyun.com/2301_80311539/article/details/149501884</guid><author>2301_80311539</author><pubDate>Mon, 21 Jul 2025 23:57:19 +0800</pubDate><description><![CDATA[主要是构建fail树/*我们可以知道的是，当访问一个点x时，接下来需要跳转其fail[x]，以此类推，如果在某个fail[x]上出现了一个字符串，那么相应的统计次数应该加1，然后当访问到fail[x]时，又要继续访问fail[fail[x]]造成了一个点多次访问的情况。]]></description><category></category></item><item><title><![CDATA[20250720]]></title><link>https://blog.youkuaiyun.com/2301_80311539/article/details/149479393</link><guid>https://blog.youkuaiyun.com/2301_80311539/article/details/149479393</guid><author>2301_80311539</author><pubDate>Sun, 20 Jul 2025 23:46:35 +0800</pubDate><description><![CDATA[*根据题目的意思我们可以知道，因为是排列，所以一定存在环，即要么每个人都有喜欢的人，且每个人都会被人喜欢那么就有两种情况，分节点个数为奇数和偶数的环1.根据题意一定可以得出的是odd的个数一定为偶数个，因为一共有偶数个点2.odd的荷属要么为0个要么为2个，如果为大于2的偶数个数的话，我们只能删除2个点，那么其他剩余的奇数环肯定不能构成一个匹配。]]></description><category></category></item><item><title><![CDATA[20250719]]></title><link>https://blog.youkuaiyun.com/2301_80311539/article/details/149460277</link><guid>https://blog.youkuaiyun.com/2301_80311539/article/details/149460277</guid><author>2301_80311539</author><pubDate>Sun, 20 Jul 2025 00:33:30 +0800</pubDate><description><![CDATA[根据前缀数组p[i], 后缀数组s[i], 可以知道的是对于某一个数组res[i]来说，第i个位置上的数一定是p[i]的倍数，也是s[i]的倍数，所以我们可以直接从p[i], s[i]得到一个lcm当作res[i]的值，最后通过res[i]计算一次gcd看是否能与前缀gcd,和后缀gcd匹配之前都是以边考虑，但是并没有利用上 树 的特点---一个节点只有一个父亲。]]></description><category></category></item><item><title><![CDATA[20250718]]></title><link>https://blog.youkuaiyun.com/2301_80311539/article/details/149439446</link><guid>https://blog.youkuaiyun.com/2301_80311539/article/details/149439446</guid><author>2301_80311539</author><pubDate>Sat, 19 Jul 2025 07:28:36 +0800</pubDate><description><![CDATA[【代码】20250718。]]></description><category></category></item><item><title><![CDATA[20250717]]></title><link>https://blog.youkuaiyun.com/2301_80311539/article/details/149416893</link><guid>https://blog.youkuaiyun.com/2301_80311539/article/details/149416893</guid><author>2301_80311539</author><pubDate>Fri, 18 Jul 2025 00:47:43 +0800</pubDate><description><![CDATA[【代码】20250717。]]></description><category></category></item><item><title><![CDATA[20250716]]></title><link>https://blog.youkuaiyun.com/2301_80311539/article/details/149391488</link><guid>https://blog.youkuaiyun.com/2301_80311539/article/details/149391488</guid><author>2301_80311539</author><pubDate>Thu, 17 Jul 2025 10:44:09 +0800</pubDate><description><![CDATA[accessory。]]></description><category></category></item><item><title><![CDATA[20250715]]></title><link>https://blog.youkuaiyun.com/2301_80311539/article/details/149350452</link><guid>https://blog.youkuaiyun.com/2301_80311539/article/details/149350452</guid><author>2301_80311539</author><pubDate>Tue, 15 Jul 2025 23:04:46 +0800</pubDate><description><![CDATA[【代码】20250715。]]></description><category></category></item><item><title><![CDATA[20250714]]></title><link>https://blog.youkuaiyun.com/2301_80311539/article/details/149328266</link><guid>https://blog.youkuaiyun.com/2301_80311539/article/details/149328266</guid><author>2301_80311539</author><pubDate>Mon, 14 Jul 2025 21:54:24 +0800</pubDate><description><![CDATA[多次查询用重构树做。询问在一个图里的多对点中路径最小值的最大值，那我们可以先做重构树，然后在做dfs找父亲的时候用maxw = max(max[u][i], max[fa[u][i - 1]][i - 1]])来更新每一段的最值，后面查询的时候用lca分别计算max。单次查询的时候可以用二分做，先把起点s的所有边权小于等于x的边假如到queue里，然后每次更新这些边所到的另一端并且保证加入的新边小于等于x,如果找到了目标点就true否则false。]]></description><category></category></item><item><title><![CDATA[20250713]]></title><link>https://blog.youkuaiyun.com/2301_80311539/article/details/149315409</link><guid>https://blog.youkuaiyun.com/2301_80311539/article/details/149315409</guid><author>2301_80311539</author><pubDate>Mon, 14 Jul 2025 00:02:25 +0800</pubDate><description><![CDATA[如果a[i]不是其后缀的最大值，那么我们肯定不能保证a[i]可以成为新数组的最后一项，但是如果我们a[i]的前面没有比a[i]小的，那么a[i]一定可以通过取前缀min成为新数组的第一项，然后再通过取前缀得到a[i]。我们考虑两种情况，如果a[i]是其后缀的最大值，那么我们在做操作的时候就一定能把a[i]置为新数组的最后一项，这个时候如果a[i]前面有比他大的，那么就可以取前缀min,比他小的就取后缀max。综上所述，如果要保留a[i]，那么a[i]要么是其前缀的min,要么是其后缀的max.]]></description><category></category></item><item><title><![CDATA[ABC395补题记]]></title><link>https://blog.youkuaiyun.com/2301_80311539/article/details/148311399</link><guid>https://blog.youkuaiyun.com/2301_80311539/article/details/148311399</guid><author>2301_80311539</author><pubDate>Fri, 30 May 2025 21:14:19 +0800</pubDate><description><![CDATA[是之前打过一次,只做出来了 a b c,现在开始重新补题。]]></description><category></category></item><item><title><![CDATA[ABC394补题记]]></title><link>https://blog.youkuaiyun.com/2301_80311539/article/details/148278397</link><guid>https://blog.youkuaiyun.com/2301_80311539/article/details/148278397</guid><author>2301_80311539</author><pubDate>Thu, 29 May 2025 15:20:09 +0800</pubDate><description><![CDATA[我们首先读题可以清楚得知道我们是要求一个子树,这个子树需要有度为1 和 4的节点,根据高中的化学知识,烷烃的性质,假设度为4的点为m个,那么一共的节点数为3 * m + 2个,那么我们就得到了一个一次函数,其中的自变量为m,所以我们要求最大的子树,那么就是要求仅用度大于等于4的节点能构成的最大的子树的节点数.那么我们这个题就提取出来了关键信息.已知在树上,又是求子树的最大,那么可以想到算法--树形dp.我们用dp[i][0], dp[i][1]做dp,其中的详细意思在代码注释中.<question3>]]></description><category></category></item><item><title><![CDATA[ABC393补题记]]></title><link>https://blog.youkuaiyun.com/2301_80311539/article/details/148238866</link><guid>https://blog.youkuaiyun.com/2301_80311539/article/details/148238866</guid><author>2301_80311539</author><pubDate>Tue, 27 May 2025 17:40:39 +0800</pubDate><description><![CDATA[我们可以枚举每一个数Ai 从1 ~ max，如果它的倍数的个数 小于k 个，那么就不可能是答案，否则的话，我们可以枚举它的每一个倍数j，然后将 ans[j]和Ai 取max, 虽然这样额外计算了很多不需要的数，但是我们的 n 个数被计算了出来，且时间复杂度是调和级数。离散化的问题不用讲了，我们的BIT里的a[]存放的就是以一个数结尾的最大上升子序列的长度,基础部分就是BIT对LIS的做法,那么输出答案的时候,再对x做一次查询即可.通过题目可以知道我们要处理的就是LIS + 右端点的限制 + 最大值的限制。]]></description><category></category></item><item><title><![CDATA[P3957 [NOIP2017 普及组] 跳房子]]></title><link>https://blog.youkuaiyun.com/2301_80311539/article/details/144794377</link><guid>https://blog.youkuaiyun.com/2301_80311539/article/details/144794377</guid><author>2301_80311539</author><pubDate>Sat, 28 Dec 2024 20:11:04 +0800</pubDate><description><![CDATA[第二个check是单调队列优化了的。至于我注释标注error的部分是因为如果a加上最大的跳跃距离如果不能到达b点的话，应该继续向后查找，但是如果在for里面加上这个条件会直接跳出循环而错误，即使a加入队列，那么也会在之后的while里面被弹出。时间不放心可以在入队的for里面加上一次判断，如果A不满足就continue.第一个check是最最最朴素的dp，就直接根据题意进行，不多做解释。这个是一个单调队列+二分+dp的题，有一定的难度。同时也是我自己做的第一个蓝题，调了很久，以此记录。就直接记录我的卡点。]]></description><category></category></item></channel></rss>