- 博客(40)
- 收藏
- 关注
原创 Codeforces Round 1047 (Div. 3) F题题解记录
前者可以通过单调栈实现,后者可以用单调栈+二分实现。的任何数,因为此时前缀最大值都相同。否则:首先由于前缀最大值的要求,对于。,其左边第一个大于等于他的数的位置。的位置再往前推,找到第一个大于等于。的范围就需要缩小了。的子数组,我们随便考虑一个。的数的位置,因为这个位置下。的前缀最大值相同的数组。的数的位置以及大于等于。位置的子数组都会贡献。,不要重复计算贡献。
2025-09-25 21:04:16
284
原创 Codeforces Round 1051 (Div. 2) D1题 题解记录
大致题意:对于一个数组,找出其中有多少个子序列,其不包含严格下降的三个数。之所以会发生变化,是因为其中最大值也发生了变化。(这一题或许很简单,但是我脑子转的比较慢,遂记录一下题解)自己可以单独成为一个新的合法的子序列;假如从合法的子序列中随便考虑一个。个合法的子序列,现在考虑第。,故被视为不合法的。可以不跟随,单独继承。的时候,除了需要存入。,也需要考虑最大值。
2025-09-22 22:03:23
282
原创 Codeforces Round 1049 (Div. 2) D题题解记录
是偶数,那么所有区间都会被标记,此时我们就看如何选取会使得新产生的区间长度总和尽可能长。贪心的选择,对于两个区间,新产生的区间的端点一定是原来两个区间的端点,即一个区间的左端点和另一个区间的右端点,这样尽可能的长。进而考虑:除去基本的区间长度,为了使得新产生区间尽可能长,每个区间要么贡献。前面大致思想都一样,就是最后一定会剩下一个区间是独立的。如果最后剩下一个未被标记的区间,则对其单独标记,并且不产生新区间。问总的被标记的区间的长度最大可以为多少。,然后产生一个新的被标记的区间。排序,选最小的即可。
2025-09-10 23:30:16
455
原创 2025牛客暑期多校训练营4 G Ghost in the Parentheses 题解记录
要想新序列是唯一合法的,其只能被还原为原来的序列,并且左括号与右括号数量上要跟原来的保持一致。要想唯一,如果调换过后是非法的,那么就说明只有原序列是合法的,进而推出唯一合法。的位置本身就是右括号,那么这个位置就算交换了也是合法的,导致结果不唯一。这样的子序列,在原先合法的情况下交换一定仍然是合法的,会出现多个合法性,不唯一;有多大的概率,使得原括号序列在变换以后,得到的新序列是唯一合法的?同类型的括号交换是没有意义的,只能交换不同类型的括号。这样的,根据计算过的前缀和(高度),如果中间出现某个位置的。
2025-08-29 17:47:11
655
原创 2025“钉耙编程”中国大学生算法设计暑期联赛(3) 1010 坚船利炮 题解记录
定义树的权值为:删去边后形成的若干连通块,所有连通块的大小的平方的和。即为最终所有方案中权值之和,比上方案总数即为期望。为什么需要这些信息?大致题意:给定一棵树,可以删去其中。之间边不断开,所以这部分只有原先。可以利用启发式合并稍微优化一下。我们需要知道,对于当前节点。断开来的一部分,再加上原先的。所在连通块的大小的平方的和。的连通块的大小的平方的和。的时候,同样继承于原先的。有两种方案,大小分别为。,这就是为什么维护信息。的信息只能继承于原先的。所在连通块的大小的和。此时此时删的总边数为。
2025-08-23 16:32:56
797
原创 Codeforces Round 1030 (Div. 2) D2 Red Light, Green Light (Hard version) 题解记录
针对每次询问,我们找出此时向右移动不变量属于的组别,然后从这个组别中找到其右边最近的红绿灯,找不到说明可以一路畅通,找到了的话说明会在那个红绿灯处转向变成向左,此时直接查询。我们能否安全穿过某个红绿灯,取决于当前的位置和时间以及红绿灯的属性。当达到某个红绿灯,且此时红绿灯变红,你的移动方向会瞬间转向,然后继续移动。在建完图以后,我们需要判断图上哪些点是在环中的,哪些环是最终可以逃出去的。可以考虑建个图:针对每个红绿灯,从此点出发向右的时候,定值为。状态,访问中说明找到了环,未被访问就访问。
2025-08-22 17:13:07
568
原创 Codeforces Round 1031 (Div. 2) D题 Cheater 题解记录
每次对战:你和对手分别出最靠前的牌比大小。大的一方赢,同时赢的牌被丢出场外,输的牌放回原手牌,位置不变。针对交换操作,把前面的最小值和后面的最大值交换明显是较好的,如果前面的最小值小于后面的最大值。在如此交换以后,答案一定会更优。模拟一遍,看看答案最后是否符合要求。如果符合的话,还可以考虑交换此位置。由此可以看出最终答案是具有单调性的了。,那么就可以缩小边界。的排列构成的牌,你和对手各取其中。你可以在任意位置选择操作。问你最多可以赢几次。张牌,那么你也一定能赢。,这时的操作不会更劣。,如果可以,我们交换。
2025-08-22 13:20:36
193
原创 2025“钉耙编程”中国大学生算法设计暑期联赛(3) 1003 光线折射 题解记录
大致题意:在二维坐标系中,每个整点位置都有一垂直于。,用此式子递推可以避免每次都暴力用快速幂计算。其中,相邻两个字符相同会贡献。现转化为:所有可能的字符串权值之和。的玻璃,光线可折射和反射。此时有一个需要注意的,如果每次都。假设与玻璃接触后射向。轴正方向发射,故还会多出一个。从这里,我们可以开始考虑枚举。,那么就可以得到一个以。个空位,从这些空位选取。
2025-08-19 16:51:22
931
原创 2025“钉耙编程”中国大学生算法设计暑期联赛(3)1009 线段染色 题解记录
一条线段称为被染色的,当且仅当这条线段上至少有一点被染色。求所有线段都被染色的概率。中所有囊括的线段均被染色的合法方案的概率之和。,这些线段都要被染色。所以我们可以预处理出所有右端点。作为最后一个染色位置的有效方案转移过来。为了保证新方案有效,对于所有右端点小于。这些线段中,左端点最大的位置。为一个合法的状态,即所有线段都被染色。,上式左边可以预处理。有一些需要注意的地方:对于某个位置。坐标轴上每个点被染色的概率为。,其必定会被选中,记得跳过去。作为最后一个染色的位置,大致题意:给定一坐标轴。
2025-08-19 11:00:05
438
原创 2025“钉耙编程”中国大学生算法设计暑期联赛(2)1009 苹果树 题解记录
的时候,由于其是新链的链顶,那么其父亲的重儿子必定不是它。的重儿子,我们正常更新。在查询的时候,正常跳跃更新答案。大致题意:给定一棵树,点有权值。深度较小,我们需要考虑其是否可能是其父亲的轻儿子,即。于是再单独针对链顶更新一次。位于同链的时候,我们需要额外注意:假设。,我们不用立即去更新,而是给其父节点。没区别,必定超时的。从线段树的懒标记可以得到启发:对于。写完了还没意识到其本质跟遍历。的轻儿子,其作为一条新链的。考虑用重链剖分,此时操作。的所有儿子,每次跳即可。很好查询,用线段树维护。
2025-08-02 15:38:26
297
原创 2025“钉耙编程”中国大学生算法设计暑期联赛(1) 1003 奸商 题解记录
的子串,可以得到所有的不合法的状态。把所有不合法状态记录下来取补集可以得到所有合法的状态,遍历所有合法的状态然后记录最小代价即可。首先,对于奇数长度的子串,其一定是优秀的,因为中间那个字符一定满足要求。针对一个不优秀的子串,我们可以得到一个不合法状态,即所有可选的都不选。对于一个长度为偶数的不优秀的子串,我们要想让其变成优秀的,可以使用类似双指针的方法,如果。的东西,把其超集也记录为非法,最终所有未被标记为非法的即为合法状态。的偶数长度的子串也是优秀的,因为一定可以从中间选取长度为。为优秀,如果其中存在。
2025-07-30 00:07:25
296
原创 2025牛客暑期多校训练营5 E Mysterious XOR Operation 题解记录
类似的题大概都考虑位独立算贡献。位,其与别的数进行运算的时候,当前位结果为。全部相异,即位置不同,那么异或的结果一定有。位的时候,我们只需要找到有多少个数此位为。的结果中,从低位到高位扫描,将第偶数个。大致题意:定义一种新的异或运算。位与其相反,并且运算过后。所以要想保证有偶数个。,那么异或的结果会有。
2025-07-29 19:39:39
338
原创 2025“钉耙编程”中国大学生算法设计暑期联赛(1)1007 树上LCM
两条路径合并的时候,需要找到超集和,用高维前缀和可以解决。的过程,其实就是针对所有数质因数分解后的质因子指数取。并不包含,那么无论增加多少数,只要包含原来的那个数,大致题意:给定一棵树,点有权值。,求有多少条简单路径满足:路径上的点的。除此之外,如果某个数包含某个质因子。如果有一条简单路径,其上所有点或和。,这四个数分解结果分别为。分解后对应质因子的指数,首先需要知道,多个数求。的质因子的个数不会超过。个质因子指数恰好等于。
2025-07-28 22:14:38
305
原创 Codeforces Round 1039 (Div. 2) D题题解记录
我们现在来考虑给定的性质能推出什么信息:把原数组拆成若干个相邻逆序对和上升子数组组成的。两个相邻逆序对中间一定只可能隔。这三种相对次序形式之一。所以排列就是若干个类似的相对次序组成的。,在完全递减的情况下。而对于可能有其他形式组成的子数组,其。为子数组中相邻逆序对的个数。因为上升子数组长度不可能超过。证明如下:对于所有满足。大致题意:给定一个排列。
2025-07-28 15:50:46
255
原创 Codeforces Round 1039 (Div. 2) C题题解记录
现在我们来证明这个条件的充分性:考虑从左到右依次构造。每次进行如下操作:选择一个数。,问是否能通过若干次操作使得。,所以此次操作合法。所以最后一次加的时候,,所以此次操作同样合法。,那么我们可以第一次对。大致题意:一个长度为。,此次操作同样合法。
2025-07-28 15:11:21
336
原创 Codeforces Round 1032 (Div. 3) F题题解记录
根据这些信息,我们发现需要维护的有:前缀和、上一个。的双端,我们可以考虑利用前缀和,每到一个新地方。但是现在有最大值的限制。如果没有的话,就无有效区间。,那么所有包含这个点的区间都是无效的,维护一个区间,其中的元素都小于等于。如果只是简单的找到满足和为。:我们针对已经存的前缀和为。大致题意:给定一个数组。如果有的话,针对所有。的下标,二分查找最大的。为右端点的区间:如果。、前缀和对应的下标。的都好处理,重点在于。
2025-07-17 09:58:25
355
原创 Codeforces Round 1033 (Div. 2) and CodeNite 2025 E题题解记录
的车道数会减少,即需要挪出去的数量会减少,而相应地阈值提高了,需要挪进来的数量会增加。辆车,每辆车的愤怒值为其在当前车道的位置,比如某个车道有三辆车,此车道总的愤怒值为。,肯定是车数多的挪到车数少的才有可能减少愤怒值(如果少挪到多的,增加的总值为。然后就是各种细节讨论,有更简单的逻辑,但是我脑子比较笨,看不太懂QAQ。的时候,挪不挪对总的愤怒值都没有影响。现在询问能达到的最小的愤怒值(全局+各车道)为多少。的,一个车道只能有一辆车去填充别的。为总的需要挪入的车的数量,即。为总的需要挪出的车的数量,即。
2025-07-16 09:52:09
570
原创 Codeforces Round 1033 (Div. 2) and CodeNite 2025 D题题解记录
使得从这个矩阵中通过删除某一行或者某一列得到的。我们可以反过来考虑,只有一个数,有。在这种情况下,我们已经保证了在每一列都至少有。个完全相同的多元组。大致题意:给定三个正整数。:字典序最小,首先我们让。的矩阵,其中每个元素都。问字典序最小的二元组。的矩阵所有元素都相等。代表其颜色(数值),个,剩下的一种可能有。
2025-07-15 10:09:30
285
原创 EPIC Institute of Technology Round Summer 2025 (Codeforces Round 1036, Div. 1 + Div. 2) E题题解记录
为了使得操作次数尽可能少,我们每次尽可能在保证前后缀和相等的情况下,多删一些。如果可以,最小化操作次数;数组每次减去的一定是偶数,故如果原先。数组之和为奇数,最终一定不可以全变为。,我们每次都可以在数组两端减去一个。除此之外,对于数组中的最大值。问是否最终能使得所有的。大致题意:给定一个数组。,每次可以构造一个数组。除去无解情况,针对数组。,这样最终一定可以使得。,那么不论怎么操作。
2025-07-14 16:10:18
406
原创 Codeforces Round 1035 (Div. 2) E题题解记录
除去无解的情况,我们接下来要想着尽可能最小化操作次数。这样可以保证,从小到大的这个过程比较的“紧贴”。接下来想一下是否还有其他的无解的情况。如何构造尽可能接近的呢。如果可以,输出最少操作次数;,针对数组可以进行如下操作:任选下标。问是否能通过若干次操作使得对于。得到的候选值是有限的,最多只有。同时手玩几个样例会发现:如果。最小化操作次数,要求新生成的。首先对于这类题,大概率考虑。的第29位设置为1,此时。保持与原来的一样,而低位。大致题意:给定长度为。非常大以至于可以囊括。的上限,一定可以根据。
2025-07-14 10:27:51
374
原创 Codeforces Round 1035 (Div. 2) D题题解记录
我们把操作方法的次数转换为:针对每个令牌,其被删除的方法的个数。,每个整数点都有个令牌。我们针对一个有效的数组,进行。,选择一个其令牌未被删除的地方,删除其令牌。有多少个空闲的位置,所以我们可以记录下考虑第。个位置的令牌的时候,后面有多少个空闲的位置。个位置的令牌的时候,后面可用的位置(包括。,第一次操作无动作,第二次操作只能删除。位置上的令牌,第三次操作可以选择删除。次的不同操作方法的次数。的某一个位置删除,因为这样。个位置不删的时候,状态同。这个位置取走的前提下,个,而每个位置都可以取。
2025-07-13 09:52:28
551
原创 Codeforces Round 1034 (Div. 3) G题题解记录
其可能会影响的只有左边和右边两个数。所以只需要判断修改前后大小关系,更新。所以,对于是否可以组成非递减序列,我们只需要判断跳跃次数。,使得得到的新的数组呈现非递减排列(不实际改变,只询问)。以此类推,根据跳跃次数,在跳跃次数相同的时候,如果。的大小关系来判断,更新的时候更新所有因数。从0次跳跃开始,最多可以跳跃多少次?,那么在先前保证贪心策略下,:查询:是否能够针对每一个。大致题意:给定一个正整数。必须进行一次跳跃才能保证。我们预处理出所有可能作为。所有可以变化的数为一个。可以变化的最小的数就是。
2025-07-10 22:59:00
704
原创 Codeforces Round 1019 (Div. 2) C题题解记录
而对于一个数组,其中位数小于等于k,要求数组中小于等于k的数的个数要大于等于其中大于k的数的个数。,必须至少有两个中位数本身就是小于等于k的。,右边界是确定的,那么我们可以预处理出来。如果存在的话,那就说明可以分割。要使得三个中位数的中位数。.最简单的,左半部分和右半部分。三者中至少任意两者大于等于0。.后半部分和中间部分,类似于。那么基于此,我们可以构建。.左半部分和中间部分。如果三种情况都不满足,就是。,我们只需要知道是否存在。我们构造一个新的数组。
2025-06-30 18:00:39
739
原创 Codeforces Round 1026 (Div. 2) D题题解记录
进行一次松弛操作,v会被加入队列,然后v会重新遍历周围边。从一号点开始,每个点都有一定数量的电池。号点的时候,可以拥有的最小数量的电池。然后就tle于33case。个电池的情况下可以通过这条边。,可以取走一部分,对于每条边有边权。可以直接考虑二分,直接考虑在上限为。的情况下是不是可以走到终点。也算是为了警醒自己吧。给定一个DAG并且保证。
2025-06-25 19:40:42
888
原创 Educational Codeforces Round 166 (Rated for Div. 2) D题题解记录
对往后所有的右端点都是不合法的左端点,我们可以直接把这个端点给删了。最后保留的都是合法的区间。:我们把左括号当成+1,右括号当成-1。的个数,使得翻转此区间内的括号以后,整体仍然合法有效。大致题意:给定一个合法有效的括号序列,现在找出。为0的时候,整体才合法有效。考虑将其作为右端点。我们还必须保证:其中的最大的。并且,为了保证翻转以后。不能出现负值并且只有当。
2025-06-25 17:07:40
642
原创 Educational Codeforces Round 167 (Rated for Div. 2) D题题解记录
然后我们考虑,对于当前拥有。不同种类的锭之间互相独立,我们可以分开计算。选择的武器一定是性价比最高的,即。而每次铸造和融化都会分别获得一点经验值。问最多能获得多少经验值。那么我们考虑能不能针对所有锭数直接预处理出满足此条件的。块锭的情况下,最多可以获得多少经验值,那么。块锭的情况下,最多可以获得多少经验值。,我们一直可以选择性价比最高的,直到。,我们可以进一步直接推出来当前有。种武器,每种武器可以花费同种锭。块同种类型的锭,我们要找到一个。块锭的情况下,性价比最高的花费。,使用预处理的数据得到。
2025-05-15 11:49:27
652
原创 Educational Codeforces Round 168 (Rated for Div. 2) D题题解记录
如果一棵子树包含的所有节点(除了子树的根)均为正数,我们可以进行如下操作:使得子树的根权值+1,子树中所有节点-1。每次操作之后,节点值需为非负。现求在不限次数操作的条件下根节点的最大权值可以为多少。对于2号节点,如果本身权值就大于等于x,那么对于其子树中的所有节点,仍然只需要要求加x;如果权值小于x,那么还需要针对2号节点操作使得其权值变成等于x,操作。考虑一棵树,假设我们要在根节点1加上x,那么对于子树中所有的节点都要求加x。而新操作的次数又会要求子树中的节点权值再次下降。一定是合法的,其次,如果。
2025-05-15 10:46:05
1786
原创 Codeforces Round 1024 (Div. 2) D题题解记录
如果AC所在的位置(奇数位置或者偶数位置)逆序对数量为奇数个导致了A>C,那么考虑字典序的话,我们一定可以交换最后四个数使其变成CDAB。在此情况下,1要往前跳三个奇数位,同时为了保持偶数位置相对次序不变,最后的2和3的次序发生了改变。合并以后,对于最后四个数,如果倒数第四个数大于倒数第二个数,那么我们不用考虑倒数第一个和倒数第三个数的大小关系,进行一次操作使得倒数第四个数小于倒数第二个数。然后发现样例都过不了。首先分别处理奇数位置和偶数位置的逆序对的个数,如果有偶数个逆序对,那么最后形成的一定是。
2025-05-13 09:39:53
672
原创 Educational Codeforces Round 170 (Rated for Div. 2) D题题解记录
那么我们可以考虑用差分数组来代替原先的加法,而对于第一种情况,把差分数组的信息暴力传给。考虑优化:我们发现,多数操作花在了第二种和第三种情况中的加法。为截至目前为止遇到的总的分配点数。我们首先可以想到一个很朴素的。现在询问,在某种分配策略情况下,最多可以通过多少检查。的前提下,通过的最多的检查数。,那么可以选择一种属性,使其值加1,如果。但是这样的时间复杂度比较高。,那么会有一次检查,如果。数组更新以后再转移方程。两种属性,给定一个数组。的信息传给当前状态下的。
2025-05-11 14:09:00
984
原创 Educational Codeforces Round 172 (Rated for Div. 2) D题题解记录
如果先前的区间的左端点都小于等于当前的区间的左端点,那么我我们只需要找到先前区间中大于等于当前区间右端点的最小右端点。这种规则排序,对于所有已经检查过的区间,记录下他们的右区间。对于当前查询的区间,我们可以通过二分来找到离当前右区间最近的大于等于右区间的位置。,按照同样的逻辑再处理一遍,就可以保证在所谓左区间(实际上是右区间)都囊括的前提下寻找最近的大于等于的右区间(实际上是原来的左区间)。其实左右区间有对称性,我们可以处理右区间的逻辑处理左区间。,都需要查询这样的信息:首先找到所有的区间构成集合。
2025-05-09 22:14:16
2047
原创 Codeforces Round 1023 (Div. 2) D题题解记录
每次操作去掉的点数一定是小于等于上次的。我们每次都可以去掉一条直径,然后对于剩下的连通分量中的树继续进行删直径操作,直到树空。要求:输出可能情况下字典序最大的三元组组成的序列。,要求这两点间简单路径经过的所有点的权重都为1,进行如下操作:记录此路径包含所有点的权重之和为。看到题目直观上想到,首先要保证每次选取的两个点一定是当前连通分量上一条直径的两端,由此保证。对于此题的时间复杂度吧,我觉着是n^2,但是为什么能过呢,我也不太清楚。,并且使得两点之间的简单路径所经过的点权重都变为0。
2025-05-06 23:56:58
725
原创 2025“钉耙编程”中国大学生算法设计春季联赛(4)1003-洞察
我们记录一下到当前位前面那一位为止全部顶格处理得到的数,这个数。再考虑前缀和的思想,计算出当前范围内有效个数。二进制表示中到前一位的数。然后对于当前位,我们取和。从二进制高位开始考虑,对于当前位,如果。返回原来的状态,并且按照顶格处理更新。,那么答案需要再加1。这一条件了,我们考虑直接计算贡献。取一样的,那么结果这一位就一定为。,那么只需继续顶格处理就行了。多次询问,每次给定正整数。先不管一次函数,我们假设。然后我们再考虑计算有效。对于属于这个区间内的。,找出有多少非负整数。一定是有上界的,假如。
2025-05-04 16:22:00
1113
原创 2025“钉耙编程”中国大学生算法设计春季联赛(3)1001数列计数
注意此时如果是最后一位,代表全部顶格处理,此时可能数也要+1。j-1和j其实相同,但是为了避免是最后一位j-1越界,选j。了,在后面的位中,我们可以直接按照没有限制的情况处理,即直接。这一位只能取0并且当前仍然是顶格状态,也就是相当于。的第0位的情况而定。如果是1,可以取0或者1。这一位可以取0或者1,取0的话,由于已经小于。可取的数量,最后全部相乘就是答案。但是注意特殊情况:如果这是第0位,要视。处理,然后往下考虑。这一位只能取0,并且已经确定小于。的限制,我们从高位开始考虑。的限制,则此时有效的。
2025-05-01 17:31:22
711
原创 2025“钉耙编程”中国大学生算法设计春季联赛(1)——1004海浪
考虑第一种情况:奇数位置最大值大于偶数位置最小值(第二种情况只需要改一下条件就行),我们用两个单调队列分别存奇数位置的最大值和偶数位置的最小值。观察可得:海浪要求当前区间内奇数位置最大值大于偶数位置最小值,或者奇数位置最小值大于偶数位置最大值。如果是偶数,判断它是否大于当前区间内奇数的最大值,如果不满足说明当前位置已经不满足了,退出;,并将其加入单调队列。的时候,一定要记得清理单调队列中落后的信息。一定是单调不减的,那么我们就考虑二分,找到。的,所以左半部分的最大的答案就是查询。,其对应的最远的海浪位置。
2025-04-24 15:07:07
619
原创 2025“钉耙编程”中国大学生算法设计春季联赛(1)——1002船长
构建一颗二叉树,则二叉树的每个叶子节点都是一名选手,根为最终胜者,除此之外的节点为其两个子节点对决后胜利的节点,或者为轮空的节点自动晋级。来判断二者是否互为对手,但是用具体编号的话会无法判断是否轮空,于是选择在每一轮都更新节点编号,对于每一轮的编号。现在,假设染染与其他水手进行较量时总能获胜,而其他水手之间的胜负是等概率的(即每人获胜概率都是。报名那天,经过广泛的交流,染染得知,包括他自己在内,总共有。,表示染染本人和所有威胁他的水手的编号,,表示水手总数和威胁染染的水手数量,名参与竞选的水手的编号即为。
2025-04-22 11:37:38
929
1
原创 牛客寒假集训营第六场B题-好伙计猜拳
小火和小鸡在进行猜拳比赛,赢者加一分,平局和败者比分不变。比赛共进行了若干局,但比赛记录可能被篡改。比赛记录的第i条形如aibi,表示小鸡当前得分为ai,小火当前得分为bi,且初始得分均为0。现在给出一个比赛记录序列a1b1a2b2...anbn,但可能存在错误。为了恢复合法的记录,每一轮,你可以选择以下两种操作之一:删除一条记录,代价为c1。交换某条记录中的两人得分(即aibi。
2025-03-22 15:29:50
653
原创 2025牛客寒假算法基础集训营4 L题 XOR-Triangle 异或三角形题解。(二进制拆位算贡献相关题目)
如果这一位为0,那么我们需要找到同行的b中这一位为1的个数,反之找0的个数。考虑第i位的时候:假设竖着的为a1、a2…考虑二进制第i位:假设有n个数,其中x个数在第i位是1,n-x个数在第i位是0,那么。,即每次选取两个数异或的结果,最后加起来(当i=j的时候 结果为0,可以忽略)。最后结果为1的可能总共有x*(n-x)个,共贡献了x*(n-x)*2^i。故只需从第0位开始考虑到第30位,每次都遍历一遍数组,记录这一位1的个数。那么每次询问其实就是一个斜边为主对角线的等腰直角三角形,即图中的A部分。
2025-03-09 23:48:23
890
7
原创 Educational Codeforces Round 174 (Rated for Div. 2) C题题解记录
Educational Codeforces Round 174 (Rated for Div. 2)
2025-03-05 23:10:53
2322
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅