<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[codemonkey_66798的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/codemonkey_66798</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; codemonkey_66798]]></copyright><item><title><![CDATA[【文章迁移告知】]]></title><link>https://blog.youkuaiyun.com/codemonkey_66798/article/details/148961058</link><guid>https://blog.youkuaiyun.com/codemonkey_66798/article/details/148961058</guid><author>codemonkey_66798</author><pubDate>Fri, 27 Jun 2025 21:30:45 +0800</pubDate><description><![CDATA[由于该平台存在随意给我的文章添加“仅vip可见”等限制的不良做法，所有文章将迁移至。，用户名LeoBlues，新的文章也将在其上发布。]]></description><category></category></item><item><title><![CDATA[Sum of Prod of Mod of Linear_abc402G]]></title><link>https://blog.youkuaiyun.com/codemonkey_66798/article/details/148480423</link><guid>https://blog.youkuaiyun.com/codemonkey_66798/article/details/148480423</guid><author>codemonkey_66798</author><pubDate>Sat, 07 Jun 2025 18:27:40 +0800</pubDate><description><![CDATA[这个问题需要前置知识：下取整和（floor sum），广义下取整和（generalized floor sum）。这属于类欧几里得算法，因为他们的时间复杂度和欧几里得算法一样在log级别。下取整和的推导和结论，结论在最后一张，可以直接去看结论：广义下取整和的推导和下取整和思路类似，但需要引入Sp(x)和sp(x)两个函数：错误指正。]]></description><category></category></item><item><title><![CDATA[Sums of Sliding Window Maximum_abc407F分析与解答]]></title><link>https://blog.youkuaiyun.com/codemonkey_66798/article/details/148335972</link><guid>https://blog.youkuaiyun.com/codemonkey_66798/article/details/148335972</guid><author>codemonkey_66798</author><pubDate>Fri, 30 May 2025 13:36:05 +0800</pubDate><description><![CDATA[将a_i从小到大排序，如果值相同，按序号排序，也就是按照关键字（a_i,i）排序，倒着遍历排序后的序列，建立一个集合保存之前遍历过的a中元素的下标，若当前遍历到的数在原数组a中的下标是id，用lowerbound在集合中寻找大于id的最小元素和小于id的最大元素，这样找到两个边界，根据(a_i,i)排序的话，找到的边界满足以上L_i和R_i的定义。当k在区间[minx+2,maxx+1]时，a_i对ans[k]的贡献是 (minx+1)*a_i，(minx+1)是上一个k的区间中k最大时a_i的出现次数。]]></description><category></category></item><item><title><![CDATA[Error Swap_arc198c分析与解答]]></title><link>https://blog.youkuaiyun.com/codemonkey_66798/article/details/148287257</link><guid>https://blog.youkuaiyun.com/codemonkey_66798/article/details/148287257</guid><author>codemonkey_66798</author><pubDate>Wed, 28 May 2025 17:31:34 +0800</pubDate><description><![CDATA[如果i=1并且j=n，那能不能借助两个元素中间的元素对i,j进行交换？操作在交换的基础上增加了加减1，首先可以发现，操作前后数组的所有数的和不变，因此如果初始时a数组元素的和不等于b数组元素的和，则a不可能变成b。现在分析一下总共需要的操作次数，让每个a_i和b_i的差值（差的绝对值）都最大，则总差值为nm，则需要进行mn/2次的。a1,a2只能变成a2-1，a1+1，因为再变就又回到a1,a2，是无法实现交换操作的。依次进行操作：(1,i) (1,j) (1,i)次)+(mn/2-m/2)*(交换需要。]]></description><category></category></item><item><title><![CDATA[2..3...4.... Wonderful! Wonderful!_cf1930E分析与解答]]></title><link>https://blog.youkuaiyun.com/codemonkey_66798/article/details/148282869</link><guid>https://blog.youkuaiyun.com/codemonkey_66798/article/details/148282869</guid><author>codemonkey_66798</author><pubDate>Wed, 28 May 2025 14:47:31 +0800</pubDate><description><![CDATA[从现在起，考虑执行删去操作的次数大于0的情况，也就是不考虑最终数组a是其原本的情况，执行最后一次删除时，一个会在s中的一个点 i 左边创造k个0，右边创造k个0，那么，在最后的s中，一定能找到一个点i，其左边0的个数>=k，右边0的个数>=k，如果找不到就说明s一定不合法，另外，比较容易发现的一点时，最终s中0的个数一定是2k的倍数，这是因为每次执行删除操作删除2k个数。1.在整个s序列从左往右第k个0的位置i和从右往左第k个0的位置j之间，即(i,j)区间存在1。2.s中0的个数是2k的倍数。]]></description><category></category></item><item><title><![CDATA[Rivalry_ARC198B分析与解答]]></title><link>https://blog.youkuaiyun.com/codemonkey_66798/article/details/148229089</link><guid>https://blog.youkuaiyun.com/codemonkey_66798/article/details/148229089</guid><author>codemonkey_66798</author><pubDate>Mon, 26 May 2025 14:42:32 +0800</pubDate><description><![CDATA[这里不用分类讨论的方法，因为浪费时间且容易考虑不周，这里将x,y,z看成已知量，将边的个数看成未知量，E(a,b)（a<b）表示连接数a和数b的边的数目，判断关于边的个数的方程是否存在解。具体有哪些边：0-0,0-1,0-2,1-1,1-2，没有2-2边，因为2两边的数必须都比他小。注：官方题解的必要性证明是错误的。]]></description><category></category></item><item><title><![CDATA[Even Split_CodeForces - 1666E分析与解答]]></title><link>https://blog.youkuaiyun.com/codemonkey_66798/article/details/148148934</link><guid>https://blog.youkuaiyun.com/codemonkey_66798/article/details/148148934</guid><author>codemonkey_66798</author><pubDate>Thu, 22 May 2025 21:20:08 +0800</pubDate><description><![CDATA[现在考虑ans_n=l>=c_(n-1)+min和ans_n<=d_(n-1)+max是否成立：先看后者，计算d_i的过程和二分时摆放max的过程其实是一样的，所以d_(n-1)+max一定等于ans_n，又因为c_i+min<=d_i+max。ans_i取[c_i,d_i]和[红,蓝]的交集，情况有如下两种，第一种可以取ans_i=d_i，第二种可以取ans_i=蓝。设a_i与a_(i+1)之间的分界点为p_i，定义c_i,d_i，表示p_i的区间范围：c_i<=p_i<=d_i，]]></description><category></category></item><item><title><![CDATA[Chord Crossing_abc405f分析与解答]]></title><link>https://blog.youkuaiyun.com/codemonkey_66798/article/details/148122964</link><guid>https://blog.youkuaiyun.com/codemonkey_66798/article/details/148122964</guid><author>codemonkey_66798</author><pubDate>Wed, 21 May 2025 20:08:16 +0800</pubDate><description><![CDATA[若在一轮询问中给出点a和b，记直接覆盖点a的线段是a1，直接覆盖点b的线段是b1，（这里，点被线段直接覆盖，关系和线段被线段直接覆盖类似），则树上从a1到b1的路径中除lca(a1,b1)外的节点对应的线段都满足覆盖了a，b中的一个点而没有全部覆盖，如果用倍增法计算出lca(a1,b1)，也知道每个节点的深度，就可以在log(m)时间得到答案：dep[a1]+dep[b1]-2*dep[lca(a1,b1)]线段 i，让节点j当节点i的父亲，如果没有线段直接覆盖线段i，线段i的父亲是节点0。]]></description><category></category></item><item><title><![CDATA[Rhythm Game_agc072分析与解答]]></title><link>https://blog.youkuaiyun.com/codemonkey_66798/article/details/148109193</link><guid>https://blog.youkuaiyun.com/codemonkey_66798/article/details/148109193</guid><author>codemonkey_66798</author><pubDate>Wed, 21 May 2025 14:39:59 +0800</pubDate><description><![CDATA[这里有一个关键观察：如果先执行了某个ddl靠后的任务，则ddl靠前的任务一定被释放，证明：执行完ddl靠后的任务 i 的最早时间是T_i+X_i，而ddl靠前的任务 j 的释放时间是T_ j - X_ j <= T_j + X_ j <=T_ i + X_ i。当完成一个任务 i 后，比i的ddl靠前的任务都被释放了，除此之外的是比i的ddl晚的任务，顺利完成任务也就是在所有任务的ddl前分别完成他们，那么应该先去执行比 i 的ddl靠前的任务 j1,j2,j3...经过时间 (cost) ：2X_i。]]></description><category></category></item><item><title><![CDATA[Path to Integer_ABC402f分析与解答]]></title><link>https://blog.youkuaiyun.com/codemonkey_66798/article/details/147835289</link><guid>https://blog.youkuaiyun.com/codemonkey_66798/article/details/147835289</guid><author>codemonkey_66798</author><pubDate>Fri, 09 May 2025 19:04:18 +0800</pubDate><description><![CDATA[对于a_i,j，其一定在最后结果数的第(2n-i-j)位（如果将最低位看成第0位），故将a_i,j看成a_i,j * 10^(2n-i-j)，这样每次加上a_i,j就可以了。考虑怎么降低复杂度，使用分治策略降低搜索的复杂度。复杂度上限估计：NlogN。]]></description><category></category></item><item><title><![CDATA[栈内存不足导致递归时栈溢出的解决方案]]></title><link>https://blog.youkuaiyun.com/codemonkey_66798/article/details/147308736</link><guid>https://blog.youkuaiyun.com/codemonkey_66798/article/details/147308736</guid><author>codemonkey_66798</author><pubDate>Thu, 17 Apr 2025 16:23:55 +0800</pubDate><description><![CDATA[来设置栈内存为256MB。]]></description><category></category></item><item><title><![CDATA[洛谷P5633最小度限制生成树 ]]></title><link>https://blog.youkuaiyun.com/codemonkey_66798/article/details/147276963</link><guid>https://blog.youkuaiyun.com/codemonkey_66798/article/details/147276963</guid><author>codemonkey_66798</author><pubDate>Wed, 16 Apr 2025 15:09:04 +0800</pubDate><description><![CDATA[满足以上条件时，在将集合x并入集合y的时候，将一个代价差：val[x]-w（w是边u-v的边权）放入数组b中，这个代价差表示，不把集合x（连通块x）连向集合y（连通块y），而是将集合x连向s点，产生的代价变动，前提是val[x]不是inf，也就是连通块x能连向s。在构建最小生成森林时，一般的kruskal直接将点u所属集合x并入点v所属集合y，现在我们为了让最终的最小生成森林里的连通块与s连接的边权最小，每次合并集合的时候，让val[y]<=val[x]，如果不满足，就交换x和y让这个条件满足。]]></description><category></category></item><item><title><![CDATA[AquaMoon and Chess_CodeForces - 1545B]]></title><link>https://blog.youkuaiyun.com/codemonkey_66798/article/details/146964737</link><guid>https://blog.youkuaiyun.com/codemonkey_66798/article/details/146964737</guid><author>codemonkey_66798</author><pubDate>Wed, 02 Apr 2025 21:27:04 +0800</pubDate><description><![CDATA[10 的情况，红色的“11”与0换位置，变成1011，可以看成蓝色的“11”到了0的后面，蓝色“11”和0的相对位置改变了，而第三个“1”是被动的，他起到了完成蓝色“11”和0换相对位置的桥梁的作用。由110变成011，由011变成110，“11”的组合和0可以交换位置。因此，单独的“1”起到了交换“11”和“0”的桥梁作用，其自身是被动的。那结果就是C(a+b,a) a是"11"组合的个数，b是0的个数。0 的时候，红色的1让“11”可以与最后一个0交换相对位置。]]></description><category></category></item><item><title><![CDATA[不等数列_洛谷 - P2401]]></title><link>https://blog.youkuaiyun.com/codemonkey_66798/article/details/146908861</link><guid>https://blog.youkuaiyun.com/codemonkey_66798/article/details/146908861</guid><author>codemonkey_66798</author><pubDate>Tue, 01 Apr 2025 12:35:35 +0800</pubDate><description><![CDATA[A(n,k) : n的排列中有k个a_i < a_(i+1) 的排列数目。题中所求的就是上升数。]]></description><category></category></item><item><title><![CDATA[排列计数_洛谷 - P4071]]></title><link>https://blog.youkuaiyun.com/codemonkey_66798/article/details/146908384</link><guid>https://blog.youkuaiyun.com/codemonkey_66798/article/details/146908384</guid><author>codemonkey_66798</author><pubDate>Tue, 01 Apr 2025 12:08:44 +0800</pubDate><description><![CDATA[先在n个位置中选好m个位置，然后剩下的数放在剩下的位置，但是放的时候不能有任何一个数放在了自己对应的位置上如果剩下了x个数，那么问题相当于x个数是从1,2....x，1不能放在第1个位置，2不能放在第二个位置，依此类推。]]></description><category></category></item><item><title><![CDATA[Lucky Chains_Educational Codeforces Round 139 ]]></title><link>https://blog.youkuaiyun.com/codemonkey_66798/article/details/146773868</link><guid>https://blog.youkuaiyun.com/codemonkey_66798/article/details/146773868</guid><author>codemonkey_66798</author><pubDate>Sun, 30 Mar 2025 20:45:11 +0800</pubDate><description><![CDATA[先来看看怎么计算每个数的最小质因数spf[i]，这些数从1到n，初始时，所有数的spf都是0，使用筛法，从i=2开始遍历到 根号n，如果当前spf[i]=0，则说明这个数没有被他的最小素因子筛过，也就是说这个数就没有素因子，是一个素数，将这个数i的倍数：i 2i 3i ... 的spf都设置成i，如果spf[ i的倍数 ]不等于0的话不设置，因为这个数已经被最小的质因子筛过了，当前的i是这个数的质因子但是不是最小的。题目给出一组(a , b)，求能让a+i和b+i互质， 0<=i<=k，最大的k是多少。]]></description><category></category></item><item><title><![CDATA[食物链 POJ - 1182分析与解答]]></title><link>https://blog.youkuaiyun.com/codemonkey_66798/article/details/146768379</link><guid>https://blog.youkuaiyun.com/codemonkey_66798/article/details/146768379</guid><author>codemonkey_66798</author><pubDate>Sun, 30 Mar 2025 16:41:00 +0800</pubDate><description><![CDATA[如果要建立x和y同类的关系，只需要检查x-A和y-B在不在同一个集合中，x-A和y-C在不在同一个集合中。如果要建立x属于y的关系，只需要检查x-A和y-A在不在同一个集合中，x-C和y-A在不在同一个集合中。每次创建关系的时候，不知道x和y具体属于（ABC中）哪一类的，可以把x和y可能的类别情况对应的关系。比如说，现在要创建x吃y的关系，就合并x-A和x-B，合并x-B和x-C，合并x-C和x-A。要创建x和y属于同类动物的关系，就合并x-A和y-A，合并x-B和y-B，合并x-C和y-C。]]></description><category></category></item><item><title><![CDATA[Okabe and Boxes_CodeForces - 821C题解]]></title><link>https://blog.youkuaiyun.com/codemonkey_66798/article/details/146638606</link><guid>https://blog.youkuaiyun.com/codemonkey_66798/article/details/146638606</guid><author>codemonkey_66798</author><pubDate>Sat, 29 Mar 2025 10:03:26 +0800</pubDate><description><![CDATA[例如 入栈：3 1 5 4，之后需要第一次出栈，整理后变成 5 4 3 1，则1出栈后，3，4，5的顺序已经符合出栈顺序，此时如果入栈一个2 ，变成 5 4 3 2，然后迎来第二次出栈，2出栈后，剩余5,4,3是符合顺序的，如果现在再出栈3次，那么这三个元素顺序一定正确。这里就有一个关键观察，在完成一次排序之后，栈内当前的所有元素的顺序已经变得符合出栈顺序，所以这个时候可以直接将栈清空。所以在出栈的时候，如果栈是空的，则说明当前需要出栈的元素已经在栈顶。]]></description><category></category></item><item><title><![CDATA[NRE AtCoder Regular Contest 085]]></title><link>https://blog.youkuaiyun.com/codemonkey_66798/article/details/146527847</link><guid>https://blog.youkuaiyun.com/codemonkey_66798/article/details/146527847</guid><author>codemonkey_66798</author><pubDate>Wed, 26 Mar 2025 14:24:23 +0800</pubDate><description><![CDATA[一开始让a的每一个元素都为1，那么之后，如果当b[i]=1时，将a[i]改成0，则(a,b)组合由(1,1)变成(0,1)，价值增加了1，当b[i]=0时，将a[i]改成0，由（1,0）变成(0,0)价值减少了1。将区间按照左端点从小到大排序，设计状态dp[i][j]（j>=i）表示前1~i个点a的值已经确定，第i+1到第j个点为1的情况下，如果j=i，那么第i个点后没有连续的1的段，前1~i个点贡献的价值。（3）是dp[i+1][从i+1到更大的数]被dp[i][从i到更大的数]更新。]]></description><category></category></item><item><title><![CDATA[Python Class 1]]></title><link>https://blog.youkuaiyun.com/codemonkey_66798/article/details/146494197</link><guid>https://blog.youkuaiyun.com/codemonkey_66798/article/details/146494197</guid><author>codemonkey_66798</author><pubDate>Tue, 25 Mar 2025 09:32:31 +0800</pubDate><description><![CDATA[【代码】Python Class 1。]]></description><category></category></item></channel></rss>