<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[puzhaoyu的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/puzhaoyu</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; puzhaoyu]]></copyright><item><title><![CDATA[Codeforces Round 982 (Div. 2) B. Stalin Sort]]></title><link>https://blog.youkuaiyun.com/puzhaoyu/article/details/143274296</link><guid>https://blog.youkuaiyun.com/puzhaoyu/article/details/143274296</guid><author>puzhaoyu</author><pubDate>Sun, 27 Oct 2024 20:50:54 +0800</pubDate><description><![CDATA[斯大林排序是一种幽默的排序算法，旨在消除那些不合适的元素，而不是费力去正确排序，从而实现 O(n) 的时间复杂度。其过程如下：从数组的第二个元素开始，如果它严格小于前一个元素（忽略那些已经被删除的元素），那么就删除它。继续遍历数组，直到它按非降序排序。例如，数组 [1,4,2,3,6,5,5,7,7] 在经历斯大林排序后变为 [1,4,6,7,7]。我们将一个数组定义为脆弱的，如果你可以通过反复对它的任何子数组应用斯大林排序，按非递增顺序对其进行排序，且需要的次数不限。]]></description><category></category></item><item><title><![CDATA[Codeforces Round 982 (Div. 2) C. Add Zeros(dfs)]]></title><link>https://blog.youkuaiyun.com/puzhaoyu/article/details/143273564</link><guid>https://blog.youkuaiyun.com/puzhaoyu/article/details/143273564</guid><author>puzhaoyu</author><pubDate>Sun, 27 Oct 2024 20:38:54 +0800</pubDate><description><![CDATA[给定一个初始包含 n 个整数的数组 a。在一次操作中，你必须执行以下步骤：选择一个位置 i，使得 1 < i ≤ |a|，并且 ai = |a| + 1 - i，其中 |a| 是数组的当前大小。在 a 的末尾添加 i - 1 个零。在执行任意次数这样的操作后，数组 a 的最大可能长度是多少？]]></description><category></category></item><item><title><![CDATA[Codeforces Round 981 (Div. 3) D. Kousuke‘s Assignment]]></title><link>https://blog.youkuaiyun.com/puzhaoyu/article/details/143243747</link><guid>https://blog.youkuaiyun.com/puzhaoyu/article/details/143243747</guid><author>puzhaoyu</author><pubDate>Fri, 25 Oct 2024 21:21:39 +0800</pubDate><description><![CDATA[在和樱子一起出去玩后，幸介非常害怕，因为他忘记了他的编程作业。老师给了他一个包含n个整数的数组a，并让他计算数组a中不重叠的美丽区间的数量，所谓美丽区间是指区间[l,r]满足al+al+1+⋯+ar−1+ar=0的情况。对于一个固定的数组a，你的任务是计算出最多有多少个不重叠的美丽区间。]]></description><category></category></item><item><title><![CDATA[Codeforces Round 981 (Div. 3) C. Sakurako‘s Field Trip]]></title><link>https://blog.youkuaiyun.com/puzhaoyu/article/details/143243516</link><guid>https://blog.youkuaiyun.com/puzhaoyu/article/details/143243516</guid><author>puzhaoyu</author><pubDate>Fri, 25 Oct 2024 21:01:59 +0800</pubDate><description><![CDATA[即使在大学，学生们也需要放松。这就是樱子老师决定去野外考察的原因。众所周知，所有学生将排成一行。索引为 i 的学生有一些兴趣话题，用 ai 表示。作为老师，您希望尽量减少学生排队时的干扰。排队的干扰被定义为有相同兴趣话题的邻近人数。换句话说，干扰是指满足 aj=aj+1 的索引 j 的数量（1≤j<n）。为了做到这一点，您可以选择索引 i（1≤i≤n），并交换位置 i 和 n−i+1 的学生。您可以进行任意次数的交换。您的任务是确定通过上述操作任意次数后能够实现的最小干扰量。]]></description><category></category></item><item><title><![CDATA[Codeforces Round 981 (Div. 3) B. Sakurako and Water]]></title><link>https://blog.youkuaiyun.com/puzhaoyu/article/details/143243052</link><guid>https://blog.youkuaiyun.com/puzhaoyu/article/details/143243052</guid><author>puzhaoyu</author><pubDate>Fri, 25 Oct 2024 20:41:39 +0800</pubDate><description><![CDATA[B. 樱子和水每个测试的时间限制为2秒每个测试的内存限制为256兆字节在与浩介的旅途中，樱子和浩介发现了一个可以表示为n×n矩阵的山谷，其中第i行和第j列交汇处是一座高度为aij的山。如果aij0，那么那里就有一个湖。浩介非常害怕水，所以樱子需要帮助他：凭借她的魔法，她可以选择一个方形的山区，并将该区域主对角线上的每座山的高度增加一个。更正式地说，她可以选择一个子矩阵，左上角位于ij处，右下角位于pq处，满足p−iq−j。然后，她可以将ik。]]></description><category></category></item><item><title><![CDATA[Codeforces Round 980 (Div. 2) C. Concatenation of Arrays]]></title><link>https://blog.youkuaiyun.com/puzhaoyu/article/details/143109091</link><guid>https://blog.youkuaiyun.com/puzhaoyu/article/details/143109091</guid><author>puzhaoyu</author><pubDate>Mon, 21 Oct 2024 12:56:15 +0800</pubDate><description><![CDATA[给定 n 个数组 a1, a2, …, an。每个数组的长度都是2。因此，ai=[ai,1, ai,2]。你需要将这些数组连接成一个长度为 2n 的单一数组，以便使结果数组中的逆序数最小。注意，你不需要实际计算逆序的数量。更正式地说，你需要选择一个长度为 n 的排列 p，使得数组 b=[ap1,1, ap1,2, ap2,1, ap2,2,…, apn,1, apn,2] 中的逆序数尽可能少。数组 c 中的逆序数是指索引对 i 和 j 的数量，其中 i<j 且 ci>cj。]]></description><category></category></item><item><title><![CDATA[Codeforces Round 980 (Div. 2) B. Buying Lemonade]]></title><link>https://blog.youkuaiyun.com/puzhaoyu/article/details/143098377</link><guid>https://blog.youkuaiyun.com/puzhaoyu/article/details/143098377</guid><author>puzhaoyu</author><pubDate>Sun, 20 Oct 2024 20:57:24 +0800</pubDate><description><![CDATA[最开始只能每一个按钮都按，而如果某次按到了某个按钮却没有饮料，那么这个按钮对应的位置已经没有饮料了，以后就不再按它。而按的顺序一定是先从头按到尾，再从头按到尾，并注意有的按钮已经不出饮料了但是还是要按一次。我们排序，遍历，每遇到更大的数字就比较。有个小技巧是定义数组长度为n+1，这样可以避免判断开头。]]></description><category></category></item><item><title><![CDATA[Codeforces Round 979 (Div. 2) C. A TRUE Battle]]></title><link>https://blog.youkuaiyun.com/puzhaoyu/article/details/143097807</link><guid>https://blog.youkuaiyun.com/puzhaoyu/article/details/143097807</guid><author>puzhaoyu</author><pubDate>Sun, 20 Oct 2024 20:24:50 +0800</pubDate><description><![CDATA[对于相同的两个布尔值，or和and都不能改变它们，而对于Alice，他倾向于向01之间加入or，Bob则想加入and。一开始我想比较1和0的多少不就行了吗，但是不对，当你加入一个运算符后，不能马上结算，因为or和and没有结合律，但是它们可以分别结合，并且and的优先级高。有一个性质，就是如果or的一边有一个1，那么另一边无论是什么最终都是1，所以我们只要保住一个1就行了。否则看中间是否存在至少两个连续的1，如果有，那么Alice先手在中间放or，最后总能用两个or把一个1保护起来，这样最后一定是1。]]></description><category></category></item><item><title><![CDATA[Codeforces Round 979 (Div. 2) B. Minimise Oneness]]></title><link>https://blog.youkuaiyun.com/puzhaoyu/article/details/143097613</link><guid>https://blog.youkuaiyun.com/puzhaoyu/article/details/143097613</guid><author>puzhaoyu</author><pubDate>Sun, 20 Oct 2024 20:02:31 +0800</pubDate><description><![CDATA[很明显，所有子序列中不是全为0就是至少有一个1，所以算出子序列总数，再让全为0的子序列数量接近它的一半。子序列不要求相邻，只要求相对位置不变，而在这个题目中又只需要考虑0，那么只用看0的个数。层杨辉三角之和减一，而长度加一，子序列总数至少翻倍，所以0的个数为n-1就行了。的01字符串，使得全为零的子序列和至少有一个1的子序列的数量之差的绝对值最小。由杨辉三角发现，长度为。]]></description><category></category></item><item><title><![CDATA[Codeforces Round 979 (Div. 2) A. A Gift From Orangutan]]></title><link>https://blog.youkuaiyun.com/puzhaoyu/article/details/143097504</link><guid>https://blog.youkuaiyun.com/puzhaoyu/article/details/143097504</guid><author>puzhaoyu</author><pubDate>Sun, 20 Oct 2024 19:54:05 +0800</pubDate><description><![CDATA[最大最小值相等，肯定为零，而我们把最大和最小的放在前两个，因为极差一定是最大的，结果就是n-1个极差。排列一串数字，使得对于所有。的最大最小值之差的和最大。]]></description><category></category></item><item><title><![CDATA[Educational Codeforces Round 170 (Rated for Div. 2) C. New Game（单调队列/滑动窗口）]]></title><link>https://blog.youkuaiyun.com/puzhaoyu/article/details/142977648</link><guid>https://blog.youkuaiyun.com/puzhaoyu/article/details/142977648</guid><author>puzhaoyu</author><pubDate>Wed, 16 Oct 2024 11:55:59 +0800</pubDate><description><![CDATA[且同时又没有连续，那么连续的这个条件可能会被忽略。第一次提交超时了，可能是因为使用unordered_map存在较多冲突，所以改成map就很稳定了。由于数据是无序，且需要找非递减，所以可以排序，但是我们又不想保留太多相同数字，于是先哈希计数，再把键值对存储到一个数组里，再排序，排序方法是根据。的大小排序，然后使用两个限制条件的滑动窗口，如果条件符合，则扩大窗口（r++），如果超过。要注意的是，因为要求连续非递减的条件比较严格，要先判断，如果长度超过。则缩小窗口（l++），如果数字不连续，l直接跳到r处。]]></description><category></category></item><item><title><![CDATA[Educational Codeforces Round 170 (Rated for Div. 2) B. Binomial Coefficients, Kind Of]]></title><link>https://blog.youkuaiyun.com/puzhaoyu/article/details/142975052</link><guid>https://blog.youkuaiyun.com/puzhaoyu/article/details/142975052</guid><author>puzhaoyu</author><pubDate>Wed, 16 Oct 2024 10:53:23 +0800</pubDate><description><![CDATA[杨辉三角的变式，由左上加上改为左上加左。找规律，发现同一竖行值相同，那么只和。]]></description><category></category></item><item><title><![CDATA[Codeforces Round 977 (Div. 2, based on COMPFEST 16 - Final Round) B. Maximize Mex]]></title><link>https://blog.youkuaiyun.com/puzhaoyu/article/details/142731745</link><guid>https://blog.youkuaiyun.com/puzhaoyu/article/details/142731745</guid><author>puzhaoyu</author><pubDate>Sun, 06 Oct 2024 21:08:46 +0800</pubDate><description><![CDATA[直到不与其他数重叠，然而超时了，然后我们发现不用一个个加，只用储存它模。只会影响后面的，另外，我们知道，只有重复多余的数才能加。我一开始从头到尾遍历，发现有重复的就不断加。给定一个数组，你可以任意给它们加上。，存到哈希表里，再访问它模。容易知道，给一个元素加上。]]></description><category></category></item><item><title><![CDATA[Codeforces Round 977 (Div. 2, based on COMPFEST 16 - Final Round) A. Meaning Mean（贪心）]]></title><link>https://blog.youkuaiyun.com/puzhaoyu/article/details/142728815</link><guid>https://blog.youkuaiyun.com/puzhaoyu/article/details/142728815</guid><author>puzhaoyu</author><pubDate>Sun, 06 Oct 2024 17:02:40 +0800</pubDate><description><![CDATA[如果你把这个过程写成算式会发现，结果就是所有数字相加，只不过每个数字被除以2的次数不同，而且越在前面的数被除得越多，所以可以排序，从最小的开始操作。我使用的是优先队列，因为我觉得每次要取最小值，然后又要插入，特别适合优先队列，但是后来发现不用，因为每次插入的那个数仍然是最小的。向下取整加入数字末尾，最大化最后剩余的数字。给定一个数组，你每次能选择两个数。]]></description><category></category></item><item><title><![CDATA[Codeforces Round 975 (Div. 2) C. Cards Partition]]></title><link>https://blog.youkuaiyun.com/puzhaoyu/article/details/142621976</link><guid>https://blog.youkuaiyun.com/puzhaoyu/article/details/142621976</guid><author>puzhaoyu</author><pubDate>Sat, 28 Sep 2024 21:44:06 +0800</pubDate><description><![CDATA[这个条件乍一看有点复杂，单看每一组不知道要装什么数字，那么先关注一些必要条件，首先所有卡片的总和要整除每组的容量，并且每种卡片的卡牌数量都不能超过组数，否则由于抽屉原理，肯定会存在有卡片没地方装，被迫和自己兄弟挤在一起。这时候你发现这些就是充分条件，想象你把每种卡片尽可能地放在不同组中，一层层地放满后，一定能够成立，不会有冲突。张任意已给出种类的卡片，使得它们可以被分成若干组，每组容量一定，且同组内不存在相同种类的卡片，求出最大能成立的容量。给出若干种卡片，每种卡片有一定数量，你可以加入不超过。]]></description><category></category></item><item><title><![CDATA[Codeforces Round 975 (Div. 2) B. All Pairs Segments（组合数学）]]></title><link>https://blog.youkuaiyun.com/puzhaoyu/article/details/142621771</link><guid>https://blog.youkuaiyun.com/puzhaoyu/article/details/142621771</guid><author>puzhaoyu</author><pubDate>Sat, 28 Sep 2024 21:19:21 +0800</pubDate><description><![CDATA[在它右边（或自身），那么这个区间就能包含这个数；对于两两之间的数也是类似的，只是它们不会成为边界。任意两数之间都能组成区间，那么我们要做的绝对不是遍历这些区间，因为复杂度过高，应该是用数学方法分析。观察题目，数组中已给出的数字和两两之间的数字一定是要分开讨论的。对于已给出的数字来说，只要边界。给出一个数组，数字两两之间能组成一个闭区间，给出若干次查询，问恰好包含于。展开分析，而是对数组中的各个数字分析，将得出的答案存储起来，以供查询。的范围很大，所以不是对每个。在它左边（或自身），边界。]]></description><category></category></item><item><title><![CDATA[Codeforces Round 975 (Div. 2) A. Max Plus Size]]></title><link>https://blog.youkuaiyun.com/puzhaoyu/article/details/142616538</link><guid>https://blog.youkuaiyun.com/puzhaoyu/article/details/142616538</guid><author>puzhaoyu</author><pubDate>Sat, 28 Sep 2024 15:45:46 +0800</pubDate><description><![CDATA[第一次提交wa了，因为最大值可能存在于多个位置，而我只找了第一个，应该把所有最大值找出来，看有没有下标为偶数的。可以给一些数字涂为红色，但是红色不能相邻，设得分为被标为红色的最大数字，加上红色数字的数量，求最大得分。然后考虑最大红色数字，在偶数的情况下，我们一定能选到数组中的最大值，然后再加上。先考虑最大化红色数字的数量，也就是隔一个涂一个，如果是偶数个数字，那么就是。然而在奇数的情况下，取到最大值时不一定能取到最大的。，这取决于最大值的位置。]]></description><category></category></item><item><title><![CDATA[Codeforces Round 962 (Div. 3) C. Sort（前缀和）]]></title><link>https://blog.youkuaiyun.com/puzhaoyu/article/details/142587213</link><guid>https://blog.youkuaiyun.com/puzhaoyu/article/details/142587213</guid><author>puzhaoyu</author><pubDate>Fri, 27 Sep 2024 10:34:47 +0800</pubDate><description><![CDATA[不同字符个数，但实际上是不对的，前缀和能够直接存储总和，因为总和只看这个数字，而与具体这个总和包含了哪些数字无关，而不同字符个数就不一样。所以我们是存储每个字符的差异数，然后查询的时候再计算总的差异数。并且由于最多只有26种字母，所以时间和空间复杂度不会太高。一看到有多次查询某个区间的操作，就想到前缀和，问题是如何存储。的含有的不同字符个数。给出两个字符串，查询。]]></description><category></category></item><item><title><![CDATA[Codeforces Round 974 (Div. 3) D. Robert Hood and Mrs Hood]]></title><link>https://blog.youkuaiyun.com/puzhaoyu/article/details/142443245</link><guid>https://blog.youkuaiyun.com/puzhaoyu/article/details/142443245</guid><author>puzhaoyu</author><pubDate>Sun, 22 Sep 2024 20:49:25 +0800</pubDate><description><![CDATA[来得到在左边结束的和在右边开始的，因为这些区间是绝对不会覆盖我们想要找的区间的，而剩下的区间要么在我们所求的区间开始，要么在这结束，就是我们要找的。有若干项任务，都会占用连续的时间，兄弟和妈妈分别会来。也就是求每一段时间内共经历了多少种任务。天，兄弟来的时候任务要多，妈妈则相反。（这是jiangly的思路和代码）的数量的后缀和，因为我们要仅通过。]]></description><category></category></item><item><title><![CDATA[Codeforces Round 974 (Div. 3) C. Robin Hood in Town（排序）]]></title><link>https://blog.youkuaiyun.com/puzhaoyu/article/details/142432408</link><guid>https://blog.youkuaiyun.com/puzhaoyu/article/details/142432408</guid><author>puzhaoyu</author><pubDate>Sun, 22 Sep 2024 10:22:11 +0800</pubDate><description><![CDATA[（要注意的是，我一开始在第四个用例wa，后来发现是使用accumulate函数时从0开始累积，导致溢出，改成0LL就行了），可以移项使得除法换成乘法，这样都可以使用整型计算。实现严格大于的方式就是在等于的情况下加一。问最大的那个元素要加多少才能使数组中有超过一半的元素小于平均值的一半。就可以获得中位数，如果长度是偶数则获得的是中位数的第二个。排序，因为题目涉及中位数，]]></description><category></category></item></channel></rss>