<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[2201_75845839的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/2201_75845839</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; 2201_75845839]]></copyright><item><title><![CDATA[atcoder一些题目复盘以及思路]]></title><link>https://blog.youkuaiyun.com/2201_75845839/article/details/144525060</link><guid>https://blog.youkuaiyun.com/2201_75845839/article/details/144525060</guid><author>2201_75845839</author><pubDate>Tue, 17 Dec 2024 10:23:38 +0800</pubDate><description><![CDATA[题目大意：对于任意一个数，考虑它的二进制表示，从最低位开始删除连续的零，直到首次遇见1时停止也就说，对于函数f凡是。（该式子括号内容易理解，写出来同余式，移项即可，括号外又mod则是为了处理括号内为。的数的集合，（对于x从0枚举到25一定可以讨论完a中的所有数）那么。具有相同结果的变量其函数值一定相同，于是考虑从。的和那么现在要做的就是如何处理这个和。，遍历数组a，引入数组cnt维护可以与当前。匹配的数的个数，val维护可以与当前。意义下的补数，并且该补数的值为。匹配的数的和，则容易得出。]]></description><category></category></item><item><title><![CDATA[codeforces一些题目思路复盘]]></title><link>https://blog.youkuaiyun.com/2201_75845839/article/details/144491141</link><guid>https://blog.youkuaiyun.com/2201_75845839/article/details/144491141</guid><author>2201_75845839</author><pubDate>Sun, 15 Dec 2024 21:02:36 +0800</pubDate><description><![CDATA[号位为0的话，那么x和y的？号位不同，也就是说，如果在same 1以后的二进制表示位中，如果m中出现的第一个1对应的x中二进制中表示位是1的话，那么我们同样可以将x转化为m，反之就证明当前的y比x要小，不满足题意，这时候我们要考虑是否可以借助一个中间值转化一下，使得这一位的值变成1(借位)，借位只能向1借，并且不能same后面的那位1实际上是不能动的，这里可以手动模拟一下，也就是说，如果在same1后面的二进制位到该位之间x二进制表示位为1的话，我们就可以借助这个中间值将其转化为上述的情况。]]></description><category></category></item><item><title><![CDATA[atcoder abc 382 lazy_tag线段树]]></title><link>https://blog.youkuaiyun.com/2201_75845839/article/details/144194601</link><guid>https://blog.youkuaiyun.com/2201_75845839/article/details/144194601</guid><author>2201_75845839</author><pubDate>Mon, 02 Dec 2024 18:19:04 +0800</pubDate><description><![CDATA[现在考虑如何把矩形对矩形的影响表示出来，如果一个长为L的矩形下落，如果可以查询出这个区间范围内当前最高点，那么最高点 - 1就是该矩形的高度，并且该矩形最终会对他本身这个长度区间的最高点产生影响，也需要区间更新的操作，那么区间查询，区间更新，很明显，懒标记线段树。思路：容易得到：寿司会被第一个美食等级小于其本身美味程度的人吃掉，并且，如果后面人的美食等级如果大于前面那个人的美食等级，那么后面那个人将永远不会吃到寿司，因为他能吃的寿司，他前面的一定可以吃，并且他前面的人有对寿司的优先选择权。]]></description><category></category></item><item><title><![CDATA[codeforces round984 div3]]></title><link>https://blog.youkuaiyun.com/2201_75845839/article/details/143478718</link><guid>https://blog.youkuaiyun.com/2201_75845839/article/details/143478718</guid><author>2201_75845839</author><pubDate>Mon, 04 Nov 2024 11:17:59 +0800</pubDate><description><![CDATA[首先翻译一下题目，有一个n * k的矩阵，现在对矩阵的每一列进行前缀or操作（就是说操作过后，矩阵的每一列就变成了从上向下的递增序列）然后给你查询，每个查询对矩阵中的数的大小进行限制，问查询到最后是否有一行满足所有的查询。并且0与1对半分，先0后1，那么只要求出x中包含几个循环节，再求出剩余数的个数，就可以知道每一列中01的数量，实际上，0并不会对xor操作的结果产生影响，因此考虑1的数量为奇数还是偶数...我们可以先封装一个函数表示求出前x个数的异或和，这道题的数据范围很大，考虑这件事情要怎么做。]]></description><category></category></item><item><title><![CDATA[atcoder abc 376]]></title><link>https://blog.youkuaiyun.com/2201_75845839/article/details/143107650</link><guid>https://blog.youkuaiyun.com/2201_75845839/article/details/143107650</guid><author>2201_75845839</author><pubDate>Mon, 21 Oct 2024 11:33:21 +0800</pubDate><description><![CDATA[对a从小到大排序，并且遍历a，对于第i个a，就是此时的max，所以现在要做的就是想办法维护出b的sum。对于b而言，我们可以动态的从前i个b中维护k - 1个sum b的最小值，例如此时i对应的b如果大于我们所维护b的最大值，那么不用对其做出改变，相反，如果小于b的最大值，那么我们就可以把此时维护b的最大值删掉，并把此时的b[i]加入到维护的sumb中，易得出，这样的作法得到的sum一定不比原先的大，对于这个维护，我们可以用大根堆维护总共的时间复杂度为。思路：扫一遍bfs即可。]]></description><category></category></item><item><title><![CDATA[atcoder abc375]]></title><link>https://blog.youkuaiyun.com/2201_75845839/article/details/142895003</link><guid>https://blog.youkuaiyun.com/2201_75845839/article/details/142895003</guid><author>2201_75845839</author><pubDate>Sun, 13 Oct 2024 10:51:02 +0800</pubDate><description><![CDATA[思路：图是一个正方形，不难发现，每次操作的含义是将整个图形顺时针旋转90°，并且每操作一次，操作的范围就小一圈。因此我们可以从最外面一圈开始枚举，最外面一圈只会被旋转一次，其次一圈会被旋转2次...以此类推，我们可以轻松写出对于任意点(x, y)在旋转一圈内的坐标变化，接下来要做的就是根据旋转次数n % 4后的值确定每个点的最终位置即可。思路：由于目标串长度只有3，因此此题就是个计数题， 用map来做。对于a[i], 这个点对答案的贡献就是1 ~ i - 2内所有与之相等的字符与其的坐标差之和。]]></description><category></category></item><item><title><![CDATA[codeforces round976 div2]]></title><link>https://blog.youkuaiyun.com/2201_75845839/article/details/142869855</link><guid>https://blog.youkuaiyun.com/2201_75845839/article/details/142869855</guid><author>2201_75845839</author><pubDate>Sat, 12 Oct 2024 10:10:54 +0800</pubDate><description><![CDATA[次，显然超时，这时候注意到我们的d很小，公差很小，就意味着每一个点最多与前面的d个点联通。注意到a | b >= a   a & c <= a因此不存在借位关系，又因为是减法运算，所以也不会存在进位关系，那么这道题就是位独立的一道题，直接拆位讨论即可。思路：注意到值域最大是1023，并且恰好二进制表示时各个位数都为1，由异或性质得知，最后S的值域也是不大于1023，可以枚举值域，然后用dp计算概率。不难发现，只有当b全部为偶数时，n才为偶数，因为在乘法中只要有一个乘数为偶数，结果就是偶数。]]></description><category></category></item><item><title><![CDATA[atcoder ABC 374]]></title><link>https://blog.youkuaiyun.com/2201_75845839/article/details/142793425</link><guid>https://blog.youkuaiyun.com/2201_75845839/article/details/142793425</guid><author>2201_75845839</author><pubDate>Wed, 09 Oct 2024 18:39:37 +0800</pubDate><description><![CDATA[思路：求最小的最大值，显然二分，二分出答案之后，对于每个i，贪心地使得处理的机器大于二分的值，并且花费最小。这时注意到每种机器处理的数量都是不大于100的，这也就意味着性价比较差的那一台机器最多不会超过100台。思路：注意到n很小，因此考虑爆搜，对于所有的点，枚举出所有的连接顺序，这一点可以用next_permutation很快的实现（注意next permutation枚举的是字典序不大于当前序列的所有排列，因此想要枚举所有的情况，应在最开始对原有序列进行sort操作使得原有序列的字典序最小）]]></description><category></category></item><item><title><![CDATA[codeforces round973 div2]]></title><link>https://blog.youkuaiyun.com/2201_75845839/article/details/142529913</link><guid>https://blog.youkuaiyun.com/2201_75845839/article/details/142529913</guid><author>2201_75845839</author><pubDate>Wed, 25 Sep 2024 18:38:01 +0800</pubDate><description><![CDATA[答案是一定的，如果不是后缀的话那么至少会有一种情况得到的反馈是子串，同样的，在我们找到后缀后，按照同样的方法向前添加字符，就可以确定最后的串，由于我们每次拓展一位最多进行两次询问，因此我们的询问总数不会超过。有了这个性质之后我们就可以执行一个循环，每次循环找出当前最小的gcd值，当我们发现本次循环的gcd与上一次循环的gcd的值一致时就可以break掉，由上述性质可知该循环是log级别的。这里进行一个简单的证明，倘若一个数组中的数足够多。如果存在其他的值只会让这种衰减衰减的更快。即gcd的值最多变化。]]></description><category></category></item><item><title><![CDATA[codeforces round974 div3 分层图 树形dp]]></title><link>https://blog.youkuaiyun.com/2201_75845839/article/details/142467310</link><guid>https://blog.youkuaiyun.com/2201_75845839/article/details/142467310</guid><author>2201_75845839</author><pubDate>Mon, 23 Sep 2024 20:39:27 +0800</pubDate><description><![CDATA[思路：首先注意到这个图只有n - 1条边，并且是连通的，也就是说这是一棵树。如果这是多个连续的被保护的点，这里以两个点为例，对答案的贡献就是gold - c - c其中一个c表示本身被相邻的点抢走的gold，另一个c表示相邻那个点被这个点抢走的gold。思路：分层图，第一层图的边权为均为w，第二层图的边权均为w / 2，第一层图的点i与第二层图的点i + n对应，由于骑上马之后一定比骑上马再下马更优，因此两层图之间用单向边连接，即，如果在点i上有马，那么就在i与i + n之间连一条边权为0的单向边。]]></description><category></category></item><item><title><![CDATA[atcoder abc372 启发式合并， dp]]></title><link>https://blog.youkuaiyun.com/2201_75845839/article/details/142433932</link><guid>https://blog.youkuaiyun.com/2201_75845839/article/details/142433932</guid><author>2201_75845839</author><pubDate>Sun, 22 Sep 2024 11:42:19 +0800</pubDate><description><![CDATA[现在考虑如何存数据。可以用并查集合并两个集合，并且在合并的时候一定要将小的集合合并到大的集合中去，因为小集合合并到大集合中，最后的集合一定大于小集合元素数量的两倍，因此合并的时间复杂度不会超过logn。思路：判断当前变化的位置对结果是否会产生影响，在询问前先计算有多少ABC, 每次变换位置x前后扫描一下[x - 2, x + 2]范围内是否有ABC，变换前有让cnt --， 变换后有让cnt ++思路：三进制转换，可以参考二进制，先把当前可以加入的最大的3的幂次加入,这样一定可以凑出答案。]]></description><category></category></item><item><title><![CDATA[codeforces 972div2 动态规划，记忆化搜索]]></title><link>https://blog.youkuaiyun.com/2201_75845839/article/details/142378928</link><guid>https://blog.youkuaiyun.com/2201_75845839/article/details/142378928</guid><author>2201_75845839</author><pubDate>Fri, 20 Sep 2024 11:31:31 +0800</pubDate><description><![CDATA[思路：最开始的思路是预处理分别求出各个字符串中narek分别的数量，然后通过动态规划求解，但是在写的过程的中发现，这样无法处理每读入五个narek分数+ 5的情况，于是改变思路，边扫字符串边dp，遇见narek中的字母让当前分数 - 1如果碰见完整的narek让分数+ 10(因为完整的narek不能算到-1的的分数中去，因此要加10，把减去的分数也加回来)dp[i][当前str的长度] = max(dp[i][当前str的长度], dp[i - 1][j] + scr)如果当前的dp[i][j][k]!]]></description><category></category></item><item><title><![CDATA[atcoder abc 371]]></title><link>https://blog.youkuaiyun.com/2201_75845839/article/details/142288757</link><guid>https://blog.youkuaiyun.com/2201_75845839/article/details/142288757</guid><author>2201_75845839</author><pubDate>Sun, 15 Sep 2024 21:04:18 +0800</pubDate><description><![CDATA[思路：注意到n非常小，因此爆搜。g图中的点以一定结构排列，我们可以枚举h图中所有点以g图为板子的所有排列，例如g图中的第一个点，可以放h图中的任意一个点，之后再暴力枚举某种排列时刻点与点之间是否有边，以此来计算花费。因此只需要记录下某个数上一次出现的位置last，该数对答案的贡献就是(i - last) * (n - i + 1)注意到范围很大有2e9，因此再加个离散化。唯一的坑点就是给定的询问中的点可能没有村庄，特判一下就好。思路：翻译一下题目就是，对于任意一个数，判断该数在多少个区间内出现过。]]></description><category></category></item><item><title><![CDATA[atcoder abc370(dp，基环树/森林，倍增)]]></title><link>https://blog.youkuaiyun.com/2201_75845839/article/details/142070258</link><guid>https://blog.youkuaiyun.com/2201_75845839/article/details/142070258</guid><author>2201_75845839</author><pubDate>Wed, 11 Sep 2024 09:35:35 +0800</pubDate><description><![CDATA[当我们二分出一个值mid之后，我们划分的每一段都不能小于这个值(除非该值本身非法),又由于划分的数量有要求，即k段，因此我们应该贪心的使我们划分的每一段在不小于mid的前提下最小，这样处理完每个点之后实际上会形成一张图，另外，假设i 点最后处理到的点是j点，由于下一次划分要从j + 1开始，因此我们可以直接设置i 点应该跳到j + 1，以此简化处理)dp[0]初始化为1，以后的所有状态都由dp[0]转移, 对于所有小于i的j，如果j，i的子段和不等于k，那么对于dp[i]就可以加上dp[j]]]></description><category></category></item><item><title><![CDATA[atcoder abc 369]]></title><link>https://blog.youkuaiyun.com/2201_75845839/article/details/141776895</link><guid>https://blog.youkuaiyun.com/2201_75845839/article/details/141776895</guid><author>2201_75845839</author><pubDate>Sun, 01 Sep 2024 11:28:39 +0800</pubDate><description><![CDATA[并且不同的连点方式也会对答案造成影响，又注意到k，也就是固定的桥范围不超过5，并且q询问也很小，因此直接枚举所有的连点情况，先枚举桥的顺序，可以用next_permutation枚举，再用dfs枚举桥与桥之间的连接方式。思路：动态规划dp[i][j][k]表示第i个位置的怪物我是选择击杀还是不击杀以及这是我击杀的第几个(奇数个，偶数个)怪物。以及在最开始dp[i][1][0]可能不会出现，因此要判断dp[i][1][0]之前的状态是否出现过。思路：贪心的将手的初始位置设为第一个键位所在的位置。]]></description><category></category></item><item><title><![CDATA[codeforcese round 957 div3]]></title><link>https://blog.youkuaiyun.com/2201_75845839/article/details/140385967</link><guid>https://blog.youkuaiyun.com/2201_75845839/article/details/140385967</guid><author>2201_75845839</author><pubDate>Sat, 20 Jul 2024 16:19:45 +0800</pubDate><description><![CDATA[思路：对于每个数x拆成x个1要x - 1步，合并要x步，因此一个数x的贡献就是2 * x - 1。思路：要尽可能的往木头上跳，如果不能跳到木板上，那么就按跳的最大距离跳到水中，游到下一个木板，并在这一段游泳的过程中判断是否遇到鳄鱼，以及游泳距离。怎么这两段处理交叉，或者不交叉的情况，开个st数组对序列判重，先输出n 到 k，再输出没有被判重的代码块，再从1到m中输出没有被输出的。没申请留校，恰好碰见宿管巡楼，把隔壁寝没申请的留校的宿舍给一锅端了，吓得我直接关灯关电脑，再加上nt的真人验证，要掉大分了。]]></description><category></category></item><item><title><![CDATA[codeforces round 956 div2]]></title><link>https://blog.youkuaiyun.com/2201_75845839/article/details/140289861</link><guid>https://blog.youkuaiyun.com/2201_75845839/article/details/140289861</guid><author>2201_75845839</author><pubDate>Tue, 09 Jul 2024 11:11:50 +0800</pubDate><description><![CDATA[思路：我们现在思考一个这样的问题：交换相距任意长度的元素是否都可以通过交换相邻元素实现，答案是一定的，自己模拟一下很容易就可以证明。对于一组没有重复元素的序列，我们每一次交换相邻元素都会让该数组的逆序对数量 + 1或者 - 1也就是说，我们每一次操作都会使得ab两个数组逆序对数量的差值不变，或者减2，或者加2，如果我们可以让ab两个数组的逆序对数量相同，那么ab数组就可以相互转换，也就是如果ab逆序对数量和为偶数，数据就是合法的。思路：贪心的从第一行第一列开始构造出和b一样的数组，如果构造完后a！]]></description><category></category></item><item><title><![CDATA[atcoder abc 360]]></title><link>https://blog.youkuaiyun.com/2201_75845839/article/details/140093111</link><guid>https://blog.youkuaiyun.com/2201_75845839/article/details/140093111</guid><author>2201_75845839</author><pubDate>Mon, 01 Jul 2024 10:06:09 +0800</pubDate><description><![CDATA[第一个二分找到向左移动的蚂蚁中第一个坐标大于等于x蚂蚁的坐标，如果找不到，则说明x不会对答案有贡献，直接continue，反之如果找到了，那么开始第二个二分，第二个二分查找的是最后一个小于等于 x蚂蚁的坐标 y 加上 2 * T的蚂蚁。思路：三层循环，第一层循环枚举w，第二层循环枚举w个字母中的第i位，第三层循环枚举被划分后的每个字符串的第i位。思路：输出所有装有至少2个物品的盒子中除了最大质量的物品其余物品的质量和。将向左移动的蚂蚁视作静止，同时向右移动的蚂蚁每个单位时间移动2个单位长度。]]></description><category></category></item><item><title><![CDATA[atcoder abc 359]]></title><link>https://blog.youkuaiyun.com/2201_75845839/article/details/139993883</link><guid>https://blog.youkuaiyun.com/2201_75845839/article/details/139993883</guid><author>2201_75845839</author><pubDate>Wed, 26 Jun 2024 17:22:30 +0800</pubDate><description><![CDATA[注意到每次竖直方向上走一个可以在水平方向上多增加一个偏移量，因此只要先解决竖直方向，然后可以得到一个水平方向的最大范围，只要水平坐标在这个范围内就不用计算水平方向上的花费，反之计算差值除2即可。j与k之间又有什么联系呢，让他们错开一位上下摆放，就可以发现除了第一位和最后一位，其他位都是相同的。再加一维索引dp[i][j]表示以下标i开头的字符串且状态为j的所有good string 的数量。思路：找出所有a[i - 1]与a[i + 1]相等的pair。则有dp[i][j] += dp[i - 1][k]]]></description><category></category></item><item><title><![CDATA[atcoder abc 358]]></title><link>https://blog.youkuaiyun.com/2201_75845839/article/details/139884406</link><guid>https://blog.youkuaiyun.com/2201_75845839/article/details/139884406</guid><author>2201_75845839</author><pubDate>Sat, 22 Jun 2024 16:45:02 +0800</pubDate><description><![CDATA[1 字符串比较是浪费时间时间，因此可以考虑优先处理下字符串，这里的做法是状态压缩，o代表二进制的1，x代表2进制的0，两个摊位的爆米花口味是a | b。思路：堆， 排序， 双指针，贪心，平衡树都可以做。思路：记录下第 i-1个人买完票的时间now，更新now 为max t[i], now后now + a  输出now。3 排列组合优化 这里选的摊位并没有明确的顺序，因此先选a和先选b是一样的，可以在dfs中记录一个start。思路：注意到n很小，考虑爆搜，现在思考一个问题，如何把时间尽可能的压缩。]]></description><category></category></item></channel></rss>