console.log(🍺);|

_幸运草

园龄:7个月粉丝:4关注:1

CodeForces 比赛总结

账号 1:Eason_OIernow rating= 1431,Pupil

账号 2:Eason__cyxnow rating= 772,Newbie

记录 Div.1+2 / Div. 2 的题解。

Codeforces Round 997 (Div. 2)

惨败,rk7283,1647-95=1552,Expert -> Specialist。呜呜我的蓝名(


A. Shape Perimeter

大概是最近的 Div.2 中算比较困难的一道?

不太好说思路,画了个图:

那么直接算就行了。时间复杂度 O(n)提交记录

B. Find the Permutation

唐诗题,题意很史。

首先你会发现如果 gi,j=1,那么其实一定有 i<j。并且,假设 i 在排列中的位置是 idi,那么一定有 idi<idj。题意就是这个。

首先从 1 的情况入手。不难发现,g1,i 中一共有几个 01 的前面就有几个数。那么就可以确定 1 的位置。然后对于 2,此时它与 1 的位置关系和与 3n 的位置关系也确定了,那么也可以确定他的位置。后面的数以此类推。

那么就可以得到整个排列了。时间复杂度 O(n2)提交记录

C. Palindromic Subsequences

这种题都没有观察出来???赛时糖丸了,赛后立刻出做法。

考虑构造 1,1,2,3,4,,n2,1。这样,最长的回文子串长度为 3。首先第一个 1 和最后一个 1 放两边,中间随便加个数都行,这样的方案有 n2 种;然后第二个 1 和最后一个 1 放两边,中间也可以随便加个,方案有 n3 种,一共加起来就是 g(a)=n2+n3=2n5>n,可以通过。时间复杂度 O(n)提交记录

-D. Unique Median

妙妙题,参考了官方题解。

考虑一个子段 [l,r] 什么时候是坏的。首先必要条件显然就是 rl+1 是偶数。那么假设 [l,r] 的中位数是 x,如果这个子段是坏的,那么一定有 rl+12 个数 xrl+12 个数 >x,这样就满足条件了。

接下来考虑怎么计数。因为 1ai10,所以我们从这里入手。考虑枚举中位数是 x 时的答案。我们可以建立 b 数组,如果 aix,那么 bi=1;否则 bi=1。那么只要有一个子段的和是 0,就说明这个子段是坏的了。那么数一下即可。时间复杂度 O(nV)V 是值域,这里 V=10

代码还没写,咕咕咕。

CodeForces Round 999 (Div. 1+2)

又掉分了 /ll /ll /ll 赛时过了 ABD。

A. Kevin and Arithmetic

分讨。如果这个数组中没有偶数,那么第一次不能得分,后面都可以。那么答案就是 n1

如果有偶数,假设有 c 个偶数和 nc 个奇数,你会发现偶数除了第一个以外都是没法得分的,所以我们将其放在最前面。那么所有奇数都可以得分。那么答案就是 nc+1

做完了。时间复杂度 O(n)提交记录

B. Kevin and Geometry

简单题。

假设等腰梯形上底为 a,腰为 b,下底为 c,那么只要 a+2b>c 就可以组成等腰梯形。那么考虑贪心,找到最小的两个相等的边,然后排序,枚举剩下的所有的数,如果和他相邻的数和他的差小于两条腰的和,那么就可以。

时间复杂度 O(nlogn)提交记录

C. Kevin and Puzzle

赛时没有瞪出来怎么 dp()

直接设 dpi 表示第 i 个人是诚实的,前 i 个人的方案数。然后分讨:

  • 如果第 i1 个人是诚实的,那么有 ai1=ai,此时应该有 dpi=dpi+dpi1

  • 否则,因为骗子不会相邻,那么第 i2 个人一定是诚实的,此时应该有 ai2+1=ai,有 dpi=dpi+dpi2

最终答案就是 dpn+dpn1。(这是因为,第 n 个人可能是骗子)

时间复杂度 O(n)。多测记得清空。提交记录

D. Kevin and Numbers

很有趣的题。

正着维护合并不太好做,所以我们反着想,考虑如何将 b 中的数拆分为 a 里的数。

由于合并两个数 xy 需要满足 |xy|1,所以对于一个数 k,只能由 k2k2 合并而来。又因为每次拆分会多出来 1 个元素,所以我们需要恰好拆 nm 次。

接下来考虑怎么拆。对于 b 中当前最大的一个数,如果其已经在 a 中出现过了,那么将其与 a 中的那个数一起删掉;否则,如果可以拆分的话,这个数一定是被拆开的,那么将这个数拆开即可。这样就可以通过了。

上面过程涉及的最大值和删除操作,可以用一个优先队列维护 b,一个 map 维护 a,即可解决。时间复杂度大致是 O((nm)log(logV+logm))提交记录

CodeForces Round 1000 (Div. 2)

A. Minimal Coprime

笨蛋题。。。

你不难发现只有 [x,x+1] 才是这个所谓的“最小互素线段”。那么对于区间 [l,r],答案就是 rl+11=rl。特判特殊情况:[1,1]

时间复杂度 O(1)提交记录

B. Subsequence Update

困难题。

考虑到如果你的子序列中包含了 ip<liq>r,那么这两个元素互换之后依然不会对答案产生贡献,所以是不优的。那么所以,产生答案只可能有两种情况:一种是子序列中的所有元素都在 [l,n] 之间,另一种是子序列的所有元素都在 [1,r] 之间。那么把这两个序列取出来排序取前 rl+1 小就是答案。

时间复杂度 O(nlogn)提交记录

CodeForces Round 1001 (Div. 1+2)

A. String

不难发现每次操作都会减少一个 1。那么数一下 1 的个数就是答案。单组时间复杂度 O(|s|)

B. Clockwork

/bx /bx /bx

考虑对于一个位置 i,我们肯定是需要不停地在 1n 之间所有数之间来回移动的,那么在位置 i 至少需要花费的时间是 2×max(i1,ni)。如果所有 ti 都大于这个值,那么一定可以满足条件。反之,肯定有一个会来不及移动。

时间复杂度 O(n)提交记录

-C. Cirno and Operations

不难发现如果先反转再差分,和先差分再反转的区别就是总和取了个反。那么任意的操作序列都可以看成先做了一些差分,然后反转,然后取一些反。那么我们可以直接枚举做了几次差分,然后取绝对值,找最大值即可。时间复杂度 O(n2)

注意不做差分是不能取反的。

CodeForces Round 1002 (Div. 2)

只过了一题,耻辱!!!

A. Milya and Two Arrays

因为每个元素都至少有两个,所以我们只要找到两个数组中各有两个不一样的元素即可,或者如果一个数组全是一样的,另一个数组有三种以上不同的元素也行。时间复杂度 O(n)O(nlogn),取决于拿啥东西计数。提交记录

CodeForces Round 1004 (Div. 1+2)

上分啦。

A. Adjacent Digit Sums

讨论两种情况:

  • 第一种,x 的个位数 9。那么显然有 y=x+1

  • 第二种:x 的个位数 =9。那么 +1 之后个位变 0,十位加一,这样就有 xy=8。但是十位可能也是 9,观察可以得到不管如何进位 xy 一定是 8 的倍数。

这样就做完了。时间复杂度 O(1)提交记录

B. Two Large Bags

感觉就乱贪心啊。

考虑从小到大枚举当前是哪个数。然后:

  • 如果当前这个数出现的个数为偶数,那么留下两个这个数,剩下的全部变成这个数 x+1

  • 如果当前这个数出现的个数为奇数,且前面已经有某个数是奇数,那么判断这两个数之间是否所有数都可以出现,如果可以,那么这两个奇数都可以变成偶数。

如此贪心,整个过程结束后判断是否所有数的出现个数都是偶数个即可。提交记录

C. Devyatkino

不会证,啊吧啊吧。

你观察样例发现每次加的 7 的个数好像都是一样的。那么枚举一下每次操作都加几个 7 组成的数,然后取个最小值就完了。提交记录

D. Object Identification

牛的,这场 Div. 2D = Div. 1A,然后这题直接硬控 jiangly 50 分钟。/bx


首先判断这个 x 是不是一个排列;如果不是,那么假设这是一张图,那么显然这个点是不可以到达任何一个点的。所以假设在 x 中数 k 没有出现,则我们可以询问 ! k k+1(注意 k=n)。因为如果是 n 个点的情况,那么这些点两两互不相同,所以距离不可能是 0;我们可以根据这个判断,如果是 0,那么就是第一种;否则是第二种。

那么如果 x 是排列呢?我们可以先找到 xp1=1xp2=n。然后我们询问 1 p1 p21 p2 p1,得到两个结果 ans1ans2。那么对于 n 个点来说,显然应当有 ans1=ans2,即他们如果不相等,就一定是第一种情况。如果他们相等,说明如果是图,那么图中可能有环。但是如果有环,又由于只有 n 条边,所以两个答案最大为 n2。但是如果是 n 个点,那么一个横坐标是 1,另一个横坐标是 n,距离一定 n1

那么就做完了。时间复杂度 O(1)提交记录

CodeForces Round 1005 (Div. 2)

A. Brogramming Contest

代码还没补。

首先我们在整个字符串前面补一个 0。那么每次操作就是找到最右边的形如 01 的这个位置,然后把这个 1 后面的全部挪到 t 里去即可。时间复杂度 O(n)

Educational Codeforces Round 174 (Rated for Div. 2)

没打,补题。

A. Was there an Array?

考虑什么时候无解。不难发现如果有三个连续的 bi 形如 1 0 1 的时候,第一个应当和第二个相等,第三个也应该和第三个相等,那么,这三个都应该相等。那么第二个就应该是 1,和前面矛盾。所以这种情况就无解。

时间复杂度 O(n)提交记录

B. Set of Strangers

个人觉得比 A 好想。

观察得到对于相同的数来说,至多需要两次就可以将他们全部变成另一个数。又发现 ai 值域不大,所以考虑记 fi 表示所有 i 如果要全部变成别的数需要几次操作,不难发现 0fi2。这个可以 O(nm) 计算。那么算完之后根据贪心,选择操作次数最多的任意一个数,然后最优策略就是将所有数变成这个数。所以最终答案就是 ans=fimaxfi。时间复杂度 O(nm)提交记录

注意,700×700=490000,不是 49000。/oh

C. Beautiful Sequence

困难题。一个重要的性质是 1ai3。那么考虑从这入手,设 f1/2/3 表示当前考虑的这个数是 1/2/3 时的方案数。

然后?你会发现这里说的一个数前面有数比他大有点怪,仔细考虑一下。假设 ax 前面比它小的离他最近的是 apx。那么不难发现 apapap=1。所以第一个数一定比后面所有数小,同理最后一个数一定比前面所有数大。又因为 ai 的范围,所以只能 a1=1,asiz=3,剩下的是 2。那么计算方案数就不难了,有转移方程:

fi=fi+fi1+[i=2]×fi

(其实本来是 fi,1/2/3 的,这里直接滚动数组了)

那么做完了。时间复杂度 O(n)提交记录

本文作者:_幸运草

本文链接:https://www.cnblogs.com/eason-oier/p/18721793

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @ 2025-02-22 20:49  _幸运草  阅读(64)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起