自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(106)
  • 收藏
  • 关注

原创 【补题】Codeforces Round 1040 (Div. 2) D. Stay or Mirror

2.这个条件说明了,当你选中了ai和aj之后,如果有ai<aj,那么他们是不是逆序对,一定只取决于ai,这代表了ai,aj在考虑的时候是上下文无关的,也就是只要考虑贡献即可了。1.首先观察到2n-ai这个条件,比较容易想到排列A的中ai<aj的数,一定会有2n-ai>aj,这个条件非常关键。题意:给出一个排列A,你需要给出一个序列B,序列B的值可以等于ai或者2n-ai。问逆序对数量最小的序列B中的逆序对的个数。

2025-11-02 11:30:33 194

原创 【补题】The 2020 ICPC Asia Jinan Regional Contest A. Matrix Equation

3.具体实现中,因为点乘会创造0xCij以及1xCij,这是一定要转移到左侧对应的变量的,因为增广矩阵最右侧位置是常数,但是可以直接对对应位置异或操作,因为在实际题目中-1与1的效果等价。1.首先玩一下样例,最简单的就行,会发现该怎么做,以及为什么会有多种C,因为有些值它可以同时取0或者1,均不影响答案,并且题目基本敲定做法就是求解多组方程,高斯消元确认了。这需要你发现矩阵乘法创造的方程,只有同一列的变量会产生关系,那么也就是可以直接把C矩阵拆成一列一列的,那么空间就够了。, 问有多少个C满足。

2025-10-31 20:35:12 278

原创 【补题】The 2021 China Collegiate Programming Contest (Harbin) 部分题解(B,D,I)

3.0是特殊的,因为前导0会自己消失,也就是说b=100700,b2的答案可能是007,a要求b删去2个0,7前面的00会自己消失,所以对于0来说,应该满足aska[0]>use+pre || aska[0]<use,use是必须删去的0的数量,pre则是前导0,如果b2需要删除的操作数不够,或者说删除的操作数连操作前导0都不够,那么就是false。还高,肯定不对,但是换个角度,这个数字经历操作后,一定会变成某个新的数字,那么,不如枚举一下最后的结果,然后判断适不适合?,问最长的数字子序列的长度。

2025-10-30 21:05:20 912

原创 【补题】2021 CCPC Guilin D. Assumption is All You Need

1.先明确题目的操作,对于序列a与b,不能成功的操作就是当要操作数字ax的时候,ax(a数组数字x的下标)与bx(b数组数字x的下标)满足ax<bx && a[ax]<a[bx],这是一定不能成功的。至于其他数字,当你枚举下一个小数字的时候,我们同样也会试图把其他数字操作过来,所以多关注小的数字就好了,同时为了操作更好,我们是把能顺带一起向后动的数字给带上。就此完成,从小到大枚举数字,利用单调栈把最容易出现劣势的数字序列向后移动,这样逆序对的个数会更多,也就更容易完成a转变b的操作。

2025-10-28 20:28:36 125

原创 【补题】 Codeforces Round 1039 (Div. 2) D. Sum of LDS

题意:给一个排列,问排列种全部的连续子串,将他们的最长非递减子序列大小加起来,答案是多少,题中给出了一个特殊条件。2.那么只要统计每一个数字对结果的贡献即可,如果出现了非递减,那么它的贡献就是只有它自己,减去即可。1.惊人的注意到这个条件,其实就是在意思你,如果有一个非递减的地方,那么就是跳过它。

2025-10-26 20:40:01 210

原创 【补题】The 3rd Universal Cup. Stage 15: Chengdu B. Athlete Welcome Ceremony

可以由自己填写a、b、c任意一个字符,接下来只要求字符串相邻字符之间不重复,然后给出q个询问,每个询问给出多余的a,b,c字符,问有多少种方式填写满足要求的字符串。但是这个dp是回答a+b+c严格等于空位的答案,我们要的是大于等于的,因为给的a,b,c数量不是严格等于空位,用什么呢?到此,你就完成了一个dp,我们假设四维dp[a][b][c][p],也就是填写的a数量,b数量,c数量,以及结尾。首先,非常明显的纯血dp,dp就是了,问题是怎么dp,个人的dp写法感觉有点愚蠢。

2025-10-26 19:58:35 273

原创 【补题】Codeforces Round 775 (Div. 1, based on Moscow Open Olympiad in Informatics) B. Integral Array

2.观察到c<1e6,很明显的提示,利用除法c/x + 去重,时间复杂度大约n*log(n),然后O(1)查询即可。1.很明显没什么捷径可以直接得到结果,所以至少要枚举所有的数字进行询问。题意:给一个a数组,要求a数组对于任意x,都有数字。3.前缀和加计算向下取整区间即可。在a数组当中,问是否符合要求。关键在于观察到1e6的上限。

2025-09-05 18:38:36 201

原创 【补题】2022 China Collegiate Programming Contest (CCPC) Guilin Site E. Draw a triangle

2.但是exgcd没这么好想,我是通过考虑S=d*h/2才想到的,因为h会等于点2点1得到的角度值乘上点3与某一点的相对长度,所以得到了exgcd的公式,就不细展开了,而且发现了跟exgcd相关,vp的时候也没想起来。所以理论上我求得的位置,或者说算出来的面积d,其实是负数,但是因为本题就是要求|d|最小,所以不影响,得出的结果可以用。vp大破灭,跟队友一起补题,被这道题折磨的死去活来,主要是本人基础不扎实,exgcd居然不会,根本没想起来。这么简单的代码,摧毁了一整场的vp,QAQAQAQAQ。

2025-08-09 21:27:05 199

原创 【补题】Codeforces Round 775 (Div. 1, based on Moscow Open Olympiad in Informatics) C. Tyler and Strings

这个值每个位置都跑一次,很显然超时,因为是n方,因此考虑优化成O(1),因为一次位置的确认,只会对某一个数的数量-1,这很明显是可以O(1)维护的。1.首先考虑题目的答案怎么来的,很明显按照题目要求,对每一位进行枚举,任何一位小的数,都会允许后面的数随便排列,都是正确。这道题的关键就是这个公式,本人其他都能想到,就是少了公式根本算不了贡献,数学功底太薄弱了。之外的都需要维护,考虑树状数组或者线段树维护,点修改,区间查询即可。2.这道题最重要的一点,任何一位小的数,都会允许后面的数随便排列,这个公式是。

2025-08-08 20:16:45 275

原创 【补题】Codeforces Round 776 (Div. 3) E. Rescheduling the Exam

那么对于这个被移动走的课程,肯定是移动这个课程与其他课程的有着最差间距的课程,那肯定就是放在最长的间隔中间,或者放在最后,这样才能最有效的延长间隔天数,但不要忘了可能延长后,依旧存在其他间隔小于试图延长后的。2.放到最后面的d天,这个很重要,因为最后一节课之后的天数是不算的,不计入最后作为间隔天数,所以直接放在最末尾就行了。那么对于一个被移动的课程,原先的相邻的距离会受到影响,很明显的延长了,但是其他地方不会受影响,这就给了贪心的可能。原题解写的非常清楚,可以去看看。

2025-08-08 16:26:24 258

原创 【补题】CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes!) D. K-good

题意:给一个n,如果能被k个数整除,要求这k个数%k后不相同,问如果可以,任意k是多少,如果不可以输出-1。那么k为答案,但是要记住k<=n,又因为k和(2x+k-1)可以调换,所以两者取最小,一定是答案。k是偶数,那么(2x+k-1)就是奇数,并且k与(2x+k-1)是对称,也就是可以随意调换。首先可以发现,一个数假如有数字p,那么可以得到n=x*k+(k*(k-1)/2)然后将n*2,得到2*n=k*(2x+k-1)从来没见过,太诡异了。

2025-08-06 21:34:43 156

原创 【补题】Educational Codeforces Round 125 (Rated for Div. 2) D. For Gamers. By Gamers.

1.首先对于怎么判断是否可以战胜,公式化简一下,这个是基操了吧,发现满足k*Di*Hi>Dj*Hj即可。2.如果我们对于每一次询问,都要查的话,时间n*m真的耗不起,考虑优化到log(n)这里直接模仿了参考题解的写法,因为确实比较好,也简洁。那就使用dp,于是就解决了。

2025-08-06 18:07:58 219

原创 【补题】Codeforces Round 779 (Div. 2) C. Shinju and the Lost Permutation

那么我们只要判断Y/N,所以一定有个什么办法判定即可,不如直接把1移动到第一位来想,这个不用多说吧,就是方便更好的操作和思考。因为尾部值移动上来,如果比当前队首小的话,一定会产生贡献值+1的情况,而大于队首,减少的贡献是都有可能的。感觉就是很莫名其妙……很明显当最大值移动到首位的时候,答案为1。因此只要贡献值增加大于2,就是错误。

2025-08-06 16:50:35 295

原创 【补题】Codeforces Round 782 (Div. 2) D. Reverse Sort Sum

2)对于答案为1的位置i,在不添加0阻隔后面的时候,答案产生n,因为如果没排序到一定会产生贡献,排序到了,只要0没有出现在当前这个位置,那也会产生贡献。3)对于答案为0的位置,那很明显就是ve[i]+i,因为在排序到位置i之前,无法产生贡献,能产生贡献的只有从排序开始的到第一次下一个0的位置。2.对于一串连续1的情况,第一个1的答案就取决于第一个0的情况,而第二个1取决于第2个0,由此我们推断,我们的目的就是找出0的位置应该在哪里?对于0来说,在排序到当前位置开始,才会产生贡献,

2025-08-06 15:06:06 363

原创 【补题】Codeforces Round 715 (Div. 1) B. Almost Sorted

3.然后对着表,或者说2进制枚举,倒着计算即可,因为n可能很长,正着计算是不可能的,爆数据范围了,最多62次改变,就结束了,字典序很明显从后。2.可以自己模拟一下,也可以直接打表(确实更快),就会发现长度为n的序列,有2的n-1次幂种可能。1.可以发现如果要满足题目条件,一定是选择了某一块倒着来,比如 3 4 5 变 5 4 3。非常妙,自己做的时候,我不仅没发现是2的幂,并且把2的幂用for循环算了出来。然后发现错了,这道题给出的k在特定情况下要反着算,很妙,现在想打自己一顿。

2025-08-02 16:51:27 250

原创 【补题】2022 China Collegiate Programming Contest (CCPC) Weihai Site I. Dragon Bloodline

2.对于二分的check函数,很明显的,不可能模拟或者枚举,必须需要一个贪心思路,假设n个元素的总和是sum,也就是假设只有一个元素,那么答案就是sum/总贡献,但是因为不同元素,可能某个贡献会被浪费,因此我们要让浪费的值越少越好。题意:给定n,m,n代表有n个元素,每个元素ai个,要满足所有元素的数量需求,才能产出一个物品,m代表有m种工人,每个工人能产生。因为如果需求>贡献,浪费就是0,如果需求<贡献,那么浪费就取决于差值,差值则是越小越好。的贡献,问一次性能产出多少个物品。

2025-07-30 14:54:34 194

原创 Codeforces Round 732 (Div. 1) B. AquaMoon and Chess

综上,题目就是11看成1进行移动,可以填到各个0的空,0111100110111直接变成0110101,然后问有多少种排列那就是a是1的数量,b是0的数量。2.考虑000011100000,1为奇数情况,发现受影响的1,永远不会移动,也就是根本不会对答案产生影响,直接忽略。1.假设000001100000,发现改变形式虽然是隔了一个1跳跃,其实可以看成11整体左移右移。题意:太难描述,直接上翻译。那其实不就是11填空吗?

2025-07-28 17:21:36 131

原创 【补题】Codeforces Round 736 (Div. 1) B. Integers Have Friends

2.假设已经找出了这个区间,根据同余定理,或者说经验,也可以模拟一下,如果要取余后相同,那么必定(a-b)%m==0,也就是任意两数之间做差,如果取余m等于0,代表取余后一定相同。题意:给定一个长度为n的序列,问一个子区间,连续的!那么a%m==b%m,b%m==c%m,又有传递性,所以也就是区间里相邻两数的差,GCD不为1就行了。关键是在于发现区间点2的结论,因为很长枚举l,r就不太现实,二分和ST表就是为了优化时间复杂度。1.首先请注意到题目是子区间,这很重要,这代表选出来的数一定是相邻的。

2025-07-28 14:03:39 281

原创 Educational Codeforces Round 111 (Rated for Div. 2) C. Manhattan Subarrays

4.看似时间复杂度有问题,但是你可以模拟或者怎样,因为是非递减非递增,如果你想让一个元素的非递减非递增尽可能长,你会发现最后弄出来的序列,它的子序列长度根本就不会很长,因此看似时间复杂度O(n*n),实际上就是常数O(n)2.首先随便挑出一个样例会发现,只有当xa<=xb<=xc,ya<=yb<=yc这种格式出现时,才能有效得到答案,我也是使用了类似于画图的方式得到,还有例举样例得证。所以枚举每个l,算出它的最长选取的地方算贡献,注意下标问题,前面已经选取的区间自己就不要在用了,因为会含括。

2025-07-28 10:28:54 295

原创 【补题】Codeforces Global Round 15 B. Running for Gold

首先假设这个人存在,那么他一定能赢其他所有人至少3场,这也就代表其他人都不可能赢他三场,不存在同时两个人完成这件事的可能,因此按照胜场数排序,这个排序虽然没有真正的递增性,但是如果存在这个人,那么一定是第一个。因此对第一个人重新进行判断,因为排名没有传递性,所以利用sort排出来的第一人,不一定就满足了题目的要求,但是如果有,那只可能是第一个人。题意: n个人打了5场比赛,问有没有人能赢其他人5场里至少3场的。感觉这种观察加排序的没咋遇到过,没啥想法,记录一下。

2025-07-26 17:37:54 164

原创 【学习】Codeforces Global Round 15 C. Maximize the Intersections

题意:给出一个圆,顺时针排布1~2*n,已知连了k条边,问这个圆最好情况下有多少个线的交点,要求线与线之间不能有重复的连接点,也就是每个点只能被一条线连接。2.再考虑提前加了一条边,那么一定是由这根线分割的两边相连,但是仔细想一下当两边数量不对等的时候,少的那一边一定会连向多的一边的中间。做的时候根本没想这么多,试着试着就出来了,因为i与i+n的这种构造方式一定是对已有情况的最大,硬猜给猜出来了……1.考虑没有线的时候,那一定是i与i+n相连接,这一定是最多的连法。但是对已有边,不会改变性质。

2025-07-26 15:57:35 397

原创 【补题】Codeforces Global Round 15 D. Array Differentiation

1.不用多说,如果长度只有n-1,那随便选择数造成差值就完了,但是这个时候还多了一个数,那很明显,它一定是可以通过原数组得到的,所以这道题的关键就是判是否有一个数可以由其他数的差值得到。类似于a1=a2+a3-a4+a5-a6,那右移a1,得到0=……,n<=10,直接枚举存不存在此公式等于0即可。题意:给出长度为n的数组,问存不存在长度为n的b数组,使存在ai等于bj-bk(1<=j,k<=n)做的时候犯傻了,觉得一定是两个值得到第三个值,忘记a是b的差值可以多个数叠起来了。

2025-07-26 11:14:16 138

原创 【补题】Codeforces Round 735 (Div. 2) B. Cobb

然后由于a[i]<=n,或操作在怎么搞,也就是把出现过的最高位开始往低位全部变成1,就这,都没办法超过2*n,那很明显了,i*j可以为n*n啊,所以说即使a[i]a[j]极限情况全是2*n,最坏也就少100(k)*2*n,所以当i,j==(n-200)的时候,就算n*n有着最坏的削减,n*(n-200)没有削减,那也不能比n*n大,因此本题最多枚举200*200,好了迎刃而解,暴力就完事了。2.发现题目数据a[i]<=n,k<100,这个提示还是比较明显的,

2025-07-25 20:41:51 297

原创 【补题】Codeforces Round 735 (Div. 2) C. Mikasa

2.很明显,0~m对应得到的值没有规律,甚至异或出来的值都不一定再0~m内,但是假设我们要获得的值是x,那么。1.首先很容易观察到n>m的时候,一定不存在,因为要有0,一定要有m=n。,然后试图特判出mex,构造出来的最小可能就是m所带来的,这个点非常难判。3.这看起来毫无关联,但是我们构造的是答案x,我们先试图构造。,c是某个不属于0~m的值,因为异或的性质,可以知道。,但是在这个过程中,从高位到低位贪心构造,如果发现。,在那一刻已经满足了x>=m+1,直接跳出就行了。x有一个性质x>=m+1。

2025-07-25 19:58:34 345

原创 Codeforces Round 735 (Div. 2) D. Diane

所以考虑构造 n*a,b,(n+1)*a的答案,这一串提供的答案是2*n,因此计算到不足,然后剩下的用别的字符补齐就可以。2.我们不可能答案就是一串相同的,再尝试一下发现,两个相同字符的奇偶性不同连续子串就完成了全为奇数,奇数加偶数为奇数。1.观察样例,或者随便尝试几下,可以发现连续的相同字符串,分别的字串长度为n,n-1……题意:给出一个n,要求你构造一个字符串,使得所有的子串数量为奇数,一定能给出解,求问。代码单纯我自己防止跑错,加了n<=26,而且构造的好,其实分奇偶就行了,我属于笨代码。

2025-07-25 15:52:01 140

原创 【补题】Codeforces Round 740 (Div. 1, based on VK Cup 2021 - Final (Engine))

直接考虑分块除法,首先考虑被整除能正确抵达的楼层 i*k ,然后对于能同样除k抵达的楼层,只会存在k-1个,因此得到连续的因为除k得到的高楼层,是 [ i*k,i*k+k-1 ],因此枚举倍数,得到每一个可以抵达当前楼层进行转移,就完成了所有的状态转移。3.对于第二种操作,同第一种,这是一定要通过后缀和得到的,很明显由于向下取整的存在,有多个楼可以抵达至当前楼,即使没有被整除,且这个可以抵达的楼层是连续的。对于这个区间的由来,个人水平不够讲不清楚,推荐挑几个数字自己试一下,应该就有感觉了。

2025-07-24 14:26:07 269

原创 【补题】Codeforces Round 1000 (Div. 2) C. Remove Exactly Two

这道题很容易想到,直接删去度最多的两个点就行了,但是这并不对,因为相邻点被删去之后,会导致自己的度数-1,所以删去的第一个点和第二点都要好好考虑,本人就是没考虑第一个点对第二个点的影响,第一个点选择错了,可能第二点永远选不出最佳,反例就是三个度相同的点在一起,你不能选中间那个。因此转换思路,第一个点不贪心选,而是暴力枚举,第二个点贪心选择即可,不能两个点都贪心选,是不正确的,连通块可以直接计算得到,也好想。题意:给一个树,可以从里面删去两个点,使连通块数量最大。

2025-07-23 11:16:13 1223

原创 【补题】Codeforces Global Round 26 E. Shuffle

但在dp的过程中,自己作为叶子节点是不可以的,是别人作为非叶子节点的,自己才可以选择作为叶子节点,根作为第一个节点没有能力选择一个父节点作为非叶子节点,只能是自己,1.首先对于题意进行解析,这个操作是在干什么,然后发现,任意相邻的节点不能同时为叶子节点,然后如果我们把叶子节点归为一类,就会发现所有的叶子节点就是最大独立集。f[3]代表3节点的情况,但是要分类f[3][0/1],代表图中形状的子树3节点作为叶子节点和不是叶子节点的情况。假设以2为根,f[2]所拥有的状态只是红色部分子树,

2025-07-22 19:41:23 1767

原创 【补题】Codeforces Round 954 (Div. 3) F. Non-academic Problem

3.重现建图用了set,单纯vector是会错的,因为边双连通分量里面可能有很多条边连接了不同的分量,这里直接使用set去重了,否则会计算错误子树的点的数量。),会分成上下层或者左右层,所以进行dfs递归得到每个边的一块区域子树,另外一块其实就是n-siz,少掉的部分就是siz*(n-siz),这样代码也简单。题意:给出一个连通图,n个点m条边,问给你一次操作,可以删除任何一条边,问删除之后,让两个点之间不可以互相抵达的对数最少,是多少。,因为你转化成了树之后了,其实无非就是删去那条边(

2025-07-22 15:06:31 323

原创 【学习】P8436 【模板】边双连通分量 Tarjan判边双连通分量

else if可以直接改成else和去掉instk,因为在原本的有向图中,横叉边需要判断需不需要追溯到的是不是已经处理完毕,由于两者性质及其相似(有向图的强连通分量和无向图的边双连通分量),因此Tarjan也可以判,直接把无向图看作双向的有向图即可。但边双连通分量的关键是本质是无向边,所以边不能回去,也就是看作是有向图,因此要加上判断使用过的边或者点,那么剩下的很简单,Tarjan板子一模一样搬过来,然后原本的图不是连通图,所以每个点都出发一下。此处用Tarjan判断了无向图中的一个概念边双连通分量。

2025-07-22 10:26:28 380

原创 【补题】EPIC Institute of Technology Round Summer 2024 (Div. 1 + Div. 2) D. World is Mine

2.dp也很明显,蛋糕总数量只有5000,所以一种蛋糕也只有5000,空间完全够,所以dp方程就是当A吃到第i种蛋糕的时候,B剩余的回合数的最小吃数。1.很明显A一定从小吃到大,那么B也很简单,在A吃到之前把某一种蛋糕吃完,这样A就少吃一种,这道题没想到的点就是贪心难以维护,题意:AB吃蛋糕,A吃的蛋糕的美味度一定要严格大于之前的蛋糕,B可以随便吃,B不想让A吃的多,所以问A最多能吃多少个。那么转移就是B没吃dp[i][j]=dp[i-1][j-1]+1,注意边界。,那么考虑dp,这样就都知道了。

2025-07-21 11:50:07 286

原创 EPIC Institute of Technology Round Summer 2024 (Div. 1 + Div. 2) E. Wonderful Tree!

1.对于本道题,首先上来观察到每个节点的变化只取决于直接连接的叶子节点,看似好像是非常简单的dp,但是考虑一种情况,也就是可能改变某个叶子节点会导致更深的孩子也需要提高,所以这道题并不决定用dp做了。题意:给出一棵树根节点为1,树上每个点有一个权值,还有一个操作,就是消费1点让那个树的权值+1,要求树上每个节点的权值小于等于直接连接的子节点的权值,问最小操作。文字解释起来太长,直接用例子解释7-1-3-5,的直接子节点要提升至7,在3的时候都只要提升1本身,后面到5要提升1-3,再是1-3-5到7。

2025-07-21 11:16:13 309

原创 【补题】Codeforces Round 1002 (Div. 2) C. Customer Service

2.知道了1怎么来,考虑2怎么获得,就会发现不能由1以外的数得到,因为如果是2,那么因为1已经使用过那个时刻了,所以只能由1 1得到,不然时间上就会有冲突。1.首先要求MEX,那么不妨考虑第一个1怎么来,因为操作方式,所以只能保留最后的几个数,那么1只能由最后一个为1,且在那个时刻删除才行。因此MEX的增大只能由时间和1的同时的增大才行,统计每一组连续的1,然后求MEX即可。自己做的时候完全顺着题意做了,问题很大……题意: 借用一波洛谷的。

2025-07-21 09:37:33 268

原创 【补题】Codeforces Round 958 (Div. 2) D. The Omnipotent Monster Killer

因为你删除一个节点,为了杀死的更多,你一定会把任何不直接相连的节点一起杀死,拿链做比方1-2-3-4,最坏就是1,4杀死,然后第2轮杀死2,第3轮杀3,就是最坏情况,因此这道题的数据量保证了。题意:给出n个点的树,每个点有一个权值,在每个时间点的结束时刻,你可以选择去除掉任意数量的节点,但是要满足这个要求:不能同时删除要删除点的相邻点(由一条边相连的点)1.首先这题上来直接想到了分奇偶点然后直接删除,但是会出现权值大的点在一起,分奇偶并不能秒了,但是这为我们后面的一个优化提供了帮助。

2025-07-19 10:07:26 249

原创 【补题】Codeforces Round 958 (Div. 2) E. Range Minimum Sum 树状数组

2)假设删去这个数是J,那么区间会中断,然后再桥接在一起[L,J-1,J,J+1,R]变成了[L,J-1,J+1,R],L+1~R-1的情况需要重新计算。3)最后因为少了a[i]这个点,左侧和右侧都多计算了一次[L,J]和[R,J],利用差分,前缀和或者题解使用的树状数组都可以,完成最后一部分的删减。删去J之后,[L,J]会与[I,R]重新进行计算,所以SUM完成了删除[L,R]区间中的J之后的计算,由很多个新分割点拼凑之后,完成了对删除后内部区域的重新计算。思路: 参考。

2025-07-18 19:06:02 353

原创 【补题】Educational Codeforces Round 167 (Rated for Div. 2) D. Smithing Skill

1.贪心就不用说了,明眼人都能发现,因为能融回去,所以越能混越好,也就是a[i]-b[i]越小越好,其中注意a[i]要求你至少有a[i]以上的金属,满足这个,那么操作次数一定是最优的,至于真的很想知道正确性,就移步其他题解吧,这边就不在做证明了。3.观察到数据,发现最多也就1e6就能解决了(ai<1e6),并且由于在抵达最优操作前都会使用一种模式解决,因此dp预处理就成为了一种选择,如果到了这个思路,那么接下来就很简单了。同时有些金属数量是没法操作的,代码中条件或者use[i]==0判都可以。

2025-07-17 21:04:46 315

原创 【补题】Educational Codeforces Round 167 (Rated for Div. 2) E. Distance to Different

怎么发现的呢,例如bi=3怎么来,假设是左右端,a数组一定是【1,1,1,2】,这个情况才能出现3,也就是bi的增大必须由其他相同的数拉大与不同数的差距。那么初步的想法就是dp[i][k],k表示分的组,很经典的dp方式,很容易发现n大了k也随之可以大,最坏情况k==n嘛,这个我们稍后再说。,也就是恰好分配出k组之后,无论分出了多少组,都叫k+1组,因此也就是在原本的基础上,改为自己递归自己,且不会出现重复贡献的问题。1.首先很容易发现,其实有一个隐含的c数组,表示的是连续相同的数在数组中的情况。

2025-07-17 17:17:22 410

原创 Codeforces Round 960 (Div. 2) D. Grid Puzzle

题意:两种操作,画2x2的格子或者填满一整行,然后给出n行,ai表示这一行前ai个格子是黑色的。所以dp[i][0/1/2]表示把当前第i行填成白色后,以0/1/2三种情况结束的状态。一眼贪心加dp,如果2x2填多了,不如直接两次操作填满两行。注意的是这一行要在被填好的情况下,然后一定要以某个状态结尾。因此可能你填了2x2操作,但是还是需要另一个操作补全。0:仅仅这一行填满,不会对下一行产生影响。1:这一行填满,下一行第1~2格会被填好。2:这一行填满,下一行第3~4格会被填好。然后状态转移即可~~~~

2025-07-17 14:12:36 267

原创 【补题】 D. Prime XOR Coloring

4.因为到了6就已经要4个颜色了,所以虽然3的填法可能不是最优秀,有不连边的到不同颜色,但是问的是最小颜色,所以不影响。例如9和5 1001和0101取模后都为01,所以异或后一定是4的倍数,那么就是合数,就没有边。题意:t组测试,给一个数字n,代表接下来有1-n这几个点,其中你要给他们填颜色,满足。2.对于之后的数,考虑到4是自然数中最小的合数,那么不会连边的点就填相同数字就行。3.任意两个数对4取模后,如果相同,那么原数异或最低两位一定为00。确实要有经验才能想到,代码就很简单了。

2025-07-17 11:44:07 172

原创 【补题】Codeforces Round 969 (Div. 2) C. Dora and C++

3.裴蜀定理代表了已知x,y,其实我们能操作的数是gcd(x,y),因为加减我们都能使用,所以实际上能操作的值最小是gcd(x,y),最后在进行一个O(n)的计算,防止例如gcd为4,0,3的情况出现,因为0可以变为4,如此一来间距应该是1而不是3。2.同时一个数加,相对差距其实就是其他数减,因此可以选定0(全体减去某个数)作为基准值,然后让每个数距离0最近即可,如此一来每个数的间距就被拉到了最小。感觉就毁在数论了,根本没想到裴蜀定理,就在想怎么找出距离0最近的值,原来是裴蜀定理……

2025-06-20 15:29:33 192

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除