CF错题集
2026/8/22 12:08:51 网站建设 项目流程

B. Array Craft

题目的意思理解就卡住了我,首先我们要弄清楚题目说的最大前缀位置的含义:在所有前缀和 S1,S2,…,Sn​ 中,取最大值,然后取最小的下标i 使得 Si​ 等于这个最大值。也就是说,我们要找到第一次出现全局最大前缀和的位置。那么最大后缀位置的概念就是取到最大后缀和的最大i,另外,最大后缀和可以等价于Si-Sn。

构造的思路,看到x,y这样会让人想到分段,再加上要求数组只有+1或-1,这样我们就不男想到分段用+-1的震荡性去构造数组。

前段,交替+-1,使得y位置的前缀和为0或1,让这个值最小。然后,中段全部用一,也就是y到x之间,在这个区间内,我们构造的Sx最大。后段,继续交替用+-1,是都后面前缀和不会超过这个Sx。

B. Evanescent

这道题是之前div3的第二题,现在看来我当时没做出来的很大一部分原因是因为情况没有考虑完整,我当时考虑到了最优的情况,字符x左右两边的字符一样,并且x与他们不同。但是除了这一种情况,其实还有一种,就是当x独立成块。我当时是把这种独立成块的情况与随便哪一个的情况搞混了。现在分析一下,当我们删掉独立成块的x,那么f数组的数量就会减少1,如果这个x并非独立成块,那么就不会影响结果长度。

B. Corner Twist

我第一个想法就是用两个二维数组用来存储a和b,然后我感觉少了一个关键的观察,但是想不出来。(我发现这里有一个翻译的错误,题目里说的是1加上角落上的数字mod3的值。但是样例解释中,确实先加1在mod3,小问题,以样例为准)。

上述的关键观察就是在操作中有一个东西一直保持不变,这是我没观察到的,下次可以从这个角度考虑。这个值就是a中每行每列的和mod3的值,所以我们只需要对比b中的每行每列的和mod3是否与a对应的相等。

B. OIE Excursion

如果我能左右横跳,那岂不是包过。就是说如果两个相邻守卫之间有空档期,就是计时器归零的回合不同,那么我就可以左右横跳,这时候这两个首位后面的一个守卫我就可以忽略。虽然但是,我的思路还不够完善。

可以反复横跳这一个想法后,不应该考虑第三个守卫,而是,一段守卫,这段守卫的特征是m一致。也就是说接下来考虑的是我们能否通过这一段守卫(因为反复横跳可以跳过其他守卫),因为我们走路一格需要一秒,设这段守卫的长度为l,那么通过则需要l+1秒。那么可行性判断就有根据了,因为守卫的计时器是m小于l+1则不能通过。

(我的理解稍微有点问题,就是一开始我认为周期不一样,起始时间一样,但是实际恰好相反)

CF1935B Informatics in MAC

我一开始的思路是假如数组里没有0和有0的情况。当数组里没有0时,随便分,因为最大都是0。但是如果数组里有0,那么0的个数至少为k不然不可能每段相同。

假设数组的MEX为m

简单来说分成两段时最好的,因为,此时只需要判断,前段是否包含0~m-1,后端是否包含0~m-1;前端的长度该怎么得出?我们可以用贪心思路,就是另第一段最短并且包含0~m-1,找到哪个断点,再判断断点之后的包含情况即可。

CF2219A Grid L

我觉得关键点是找不变的东西,但是我没找到。它就是线段总段数,网格的段数与给定数量的直线线段与直角线段的段数总和,他们俩应该是一样的。那么就可以列出一个等式。

再列等式之前。可以把两部分都先单独用字母表示。

用m,n表示:此时n行m列,水平的线段数,此时每行有m+1个,有n行,那么就是n*(m+1)

垂直的段数,此时每列有n+1个,有m行,那么就是m*(n+1)

总和就是2nm+n+m。

然后就是用p,q计算总段数,p是1,q是2,那么总段数就是p+2q。

两个总段数相等,2nm+n+m=p+2q,然后再根据左边的形式,我们尝试将左边变成AxB的形式。先左右两边各乘2,然后再加1。此时问题就变成了找到两个因数乘积等于2p+4q+1。左边就变成了(2m+1)x(2n+1)。细节补充,因为m大于等于1,n也大于等于1,那么A就大于等于3,B亦是如此,所以我们就可以从3开始遍历。
我在提交的时候,还发现了一个点需要注意,我们输出的nm是有条件限制的,这个限制与pq有关,也就是说这个限制是一开始就有的。具体的说,假如我们的长的总段数比直角线段的个数,那么这个是不成立的,因为这样的话放不下那么多个直角线段。

CF1933D Turtle Tenacity: Continual Mods

是不是只要第二个数是第一个数的因数就行了,因为这样第一次算mod就等于0,然后0mod其他的数还是0。

但是有一个结论我忽略了,导致不对,当两个数相mod时(rmody)r小于y,结果不变,如果r大于等于y,此时取模后的值会小于y。所以,只要中途有一个余数小于剩余所有的数,那么计算玩所有y,这个值不改变。假设数组中的最小值为mn。

然后

情况1,mn只出现一次,那么我们就可以把mn放在首位,然后这样最终值只能是mn,输出yes。

情况2,mn出现的次数至少两次,并且,数组有个值不是mn的倍数。设这个值为x,那么我们可以这样去构造序列:x,mn,其他元素。这样构造为什么可以?x mod mn的值小于mn,所以这个数比剩下的元素都要小,那么最终的值就不会等于0,输出yes。

情况3,每个值都是mn的倍数,无法避免0。因为,怎么排列总会出现0。

CF1922B Forming Triangles

要满足条件,选出的三条边能构成三角形,要满足两边之和大于第三边。我感觉可以从小到大遍历数组,固定两条边,然后找数组中比这两条边之和小的值。

我的结局是超时,可能与我漏掉这个性质有关系,数组里每条边的值是2的ai次。这个条件可以帮我们简化过程。

该如何操作以达到简化的目的,假设三条边的位置为i,j,k;那么此时一定有,2 的 ai次 加 2 的 aj 次 小于等于 2 的 j+1 次(加上一个小于等于自己的数肯定小于等于这个数乘上2)。然后,要满足三角形的性质,ak的值必须小于等于aj,但是k要在i,j的后面,也就是ak大于等于aj,所以ak只能等于aj。但是这样做可以说有个前提,ai要小于aj不然不充分,因为还有一种情况是三条边相等。当ai等于aj的时候,他们的和就等于2的aj+1次,但是这个结论推不出ai小于aj的这种情况,所以两种情况要分开写,而且他们的计算方式也不同。

CF2218E The 67th XOR Problem

题目的意思就是我们对一个长度为n的数组操作n-1次,每次选一个数删掉,剩下的数异或这个被删掉的数,我们要做的就是找到一个合适的顺序,使得剩下的最后一个数尽可能的大。

要是每个数组的结果都只由数组内两个数组成就好了。你赢了,异或。证明之前,得先知道异或的一些性质,异或运算具有结合律以及交换律。

假如,数组只有两个数,那么答案就是这两个数的异或,这很好理解。根据归纳思维,我们假设一个长为k的数组,这个数组的里的元素有a1​,a2​,…,ak。我们对它进行题目中的操作,选中一个元素,ai=x,删除它然后数组其他每个值异或x,a1^x,a2^x,……,ak-1^x。那么从结论出发,现在数组的大难就是(ap^x)^(aq^x),再根据交换律与结合律,结果也等于ap^aq(q!=p),可以证明,归纳是对的。(其实这里可以把x看成除了pq以外的所有值,这样跟好理解一点)。然后就可以遍历整个数组,找到最大的那一个。

这题感觉就是对异或运算结合律和交换律的灵活运用,再就是数学归纳思维,显然我没做出这题是因为我这两者皆缺。

CF1916C Training Before the Olympiad

看到这题,我在想要解决masha和olya的要求,得先知道,怎么改变操作后的数,因为,按照数学的思维,和除2再乘2结果是不变的,但是,这是整形,也就是说值会改变。比如说,1和2的和是3除以2是1,乘以2是2,所以从结果上来看就是从3变成了2,变小了。所以,只要两数和为奇数就会变小?这样的话,要让剩下最后一个数字最小的话,最好是奇数和偶数相互配对,然后,多出来的就自己与自己配对。

我的思路并不是最优的解法,因为,这里面还有博弈的存在,这是我没想到的,这是两个人同时操作的数组。也就是说,想让数最大的那个人,会想办法阻止另一个人将数组变得更小,也就是把他的奇数用了,也就是这个人一定会选两个奇数,如果可以的情况下。所以,当奇数的数量是3时,那么每轮操作都只会对结果减少1(从我举得例子就可以看出,1奇1偶的选择会让结果减少1),并且奇数的数量减少3。所以我们可以考虑奇数的数量,来判断答案会不会减少,减少多少。

CF2217C Grid Covering

这道题我的思路比较倾向于用题目中的n,m和a,b之间的关系来求解,但是具体是什么关系我卡在这了。其实更核心的原因是没有将两步跳跃看成一组。

为什么?题目的要求两种跳跃需要交替进行,所以怎么看,经过两次操作之后的净收益都是(i,j)——》(i+a,j+b),过的点一定属于H={(ta mod n,tb mod m)}(这个t是常数,表示加上t个a,t个b)。

然后我们要计算的是H里有几个点,可以分开行列来计算。

先看行,每次行跳跃加a,然后经过多少次会回到原来的行?n/gcd(n,a)。同理列的答案是m/gcd(m,b)。所以要让行跟列同时回到原点需要lcm也就是两者的最小公倍数。然后,最多覆盖的格子数为2H?从左上角往右下方移动的过程中有两种移动方式,所以会多经过H个点。总共2H。

那么怎么才算覆盖所有点,光光是2H比所有格子数(nm)多是不充分的,但是如果比nm少,那一定是NO。然后就是数学公式的运用,我们设g1为gcd(n,a),g2为gcd(m,b),d=gcd(n/g1,m/g2)。又lcm(x,y)=xy/gcd(x,y)。所以H=nm/g1g2d。根据2H小于等于nm。可以得到g1g2d小于等于2。

第一种情况,g1,g2,d都等于1,此时肯定全覆盖。

第二种情况,等于2。合理的是d为2,其他为1,此时H=nm/2,所以2H正好填满。其他情况会出现2H=nm,但是两个平移集合无法经过所有的格子,所以NO。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询