自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【补题】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 146

原创 【补题】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 232

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

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

2025-08-08 16:26:24 223

原创 【补题】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 135

原创 【补题】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 195

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

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

2025-08-06 16:50:35 265

原创 【补题】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 337

原创 【补题】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 219

原创 【补题】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 165

原创 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 117

原创 【补题】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 261

原创 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 279

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

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

2025-07-26 17:37:54 124

原创 【学习】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 364

原创 【补题】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 125

原创 【补题】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 281

原创 【补题】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 326

原创 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 127

原创 【补题】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 206

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

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

2025-07-23 11:16:13 587

原创 【补题】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 804

原创 【补题】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 294

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

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

2025-07-22 10:26:28 332

原创 【补题】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 270

原创 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 298

原创 【补题】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 249

原创 【补题】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 227

原创 【补题】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 314

原创 【补题】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 290

原创 【补题】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 397

原创 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 182

原创 【补题】 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 156

原创 【补题】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 149

原创 【补题】Codeforces Round 715 (Div. 2) C. The Sports Festival

状态转移方程得dp[l][r]=min(dp[l][r-1],dp[l+1][r])+a[r]-a[l](更新的情况一定是新区间的两个最值相加,但是不知道更新的是小还是大)可以说用上了一点贪心,排序过后一些很差的答案都被排除掉了,以及这个答案的更新。题意:给你一个序列,你可以对它重新排序,然后使每个i,max(a0,a1……ai)-min(a0,a1……1.一个已经选择好的序列,添加进来的数,如果是最小,或者最大会更新状态,否则不。2.在添加的过程中,添加进来的数改变两个最值的时候越延迟,次数越多越好。

2025-06-07 15:42:56 206

原创 【补题】Educational Codeforces Round 107 (Rated for Div. 2) D. Min Cost String

题意:要求你给出一个长度为n的字符串,其中只能出现小写字母的前k个字符。要求s[i]==s[j],s[i+1]==s[j+1]出现的次数最少。直接思考最好的字符串其实就是a ab ac ad b bc bd,用完了直接循环。但是光考虑aa ab ba这种不行,因为你构造出来的字符串可能无意中出现了相同。因为没有距离贡献之类的,所以让两个连着字符的字符出现最少就可以了。其实就是贪心,让结构出现越少越好。

2025-06-07 10:47:45 229

原创 【补题】Codeforces Round 713 (Div. 3) G. Short Task

预处理采用了桶,我认为是倒着思考,每个因数对一个数产生贡献,那么就直接对于一个数,它所能产生的贡献填入即可,如果是硬算,n*sqrt(n)时间还是太大了,这种方式让时间复杂度达到了log。这道题没有什么规律可寻,很简单的一个想法就是处理出每个数的本身是多少,预处理之后O(1)回答就可以了。题意:有一种计算,让每个数的因数累加得到一个答案,然后问你c,问最小的可以计算得到c的数是谁。

2025-06-07 09:35:10 207

原创 【补题】The 2021 ICPC Asia Nanjing Regional Contest Problem J. Xingqiu’s Joke

3.考虑对于当前剩下的x,y的除法选择其中一个质因数(其实就是爆搜,枚举能除的),但是很显然超时,但是枚举的时候可能会出现 先除3再除7 和 先除7再除3,所以其实是重复的……题意:多组样例T,给x,y,三个操作1.x+1,y+1 2.x-1,y-1 3.x/p,y/p,p是x,y的共素数,让x或y等于1问操作次数最少。那么就此解决了,本题关键记忆化搜索,也就是点3,利用记忆化,将本来其实只是改变除法顺序重复的搜索大大减少,时间一来就足够了。

2025-05-22 18:50:24 189

原创 【补题】Codeforces Round 664 (Div. 1) A. Boboniu Chats with Du

2.最简单的答案就是我就选小值,也不用讨论禁言了,然后考虑开始放入大值,那么一定是放在当前时间轴的最后,因为区分点的缘故,先分开值之间的区别,对于两堆的贪心,均是能用越大的越好。题意:给出n,d,m三个值,分别代表,有多少个值ai,使用超过m的ai,需要禁言d天,如果不足也能使用,m代表区分点,问能得到最大的值有多少。1.很容易想到的一个点就是能用大值越多越好,同时因为天数不足也是可以选取的,所以大值在时间轴上的顺序,越靠后越好。利用前缀和O(1)返回剩余小值的贡献,O(n)累加枚举大值即可。

2025-04-30 19:49:13 332

原创 【补题】Codeforces Round 666 (Div. 1) B. Stoned Game

如果有一堆石子很多,别的石子堆相加都比不上,那么先手永远选那一堆就行,另外一人一定会选别的,那这样我就能继续选着了,最后对方一定会因为没石子可选。如果并不是一堆石子,那就只能先手后手都去选目前场上还剩下最多石子的石头堆,因为这样才能尽最大可能让自己获胜。题意:每人轮流可以拿走一个石子,但是不能拿上一回合碰过的石子堆,请问最后是谁获胜了。感觉自己还是太愚蠢了。

2025-04-30 13:32:03 242

原创 【补题】Codeforces Global Round 20 D. Cyclic Rotation

2.考虑从后向前遍历,如果遇到不相同的地方,那么就可以试图将b还原成a的一小部分,当然不能模拟操作,这样一来就变复杂了,因此只需要统计有多少可以还原的操作就可以了,记录操作数字的次数,询问是否能还原,如果可以那么继续,不行那就是NO。1.有个观察,如果操作过的序列,一定是连续相同的数字,当然这不代表一定操作过了,由于操作过1次后连续就没有意义,可以假设全都操作过了。自己写的时候默认了操作顺序一定是先进后出的栈,狠狠WA,而且很自信的不适用双指针,一个变量算,感觉有点多此一举了,写不好一点。

2025-04-30 12:29:14 226

空空如也

空空如也

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

TA关注的人

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