CF1834

CF1834

Virtual Contest 做了 5 道题,非常不错。

A.Unit Array

秒切题,判断个数,然后判断一下奇偶即可。

提交:https://codeforces.com/contest/1834/submission/211190220

B.Maximum Strength

题目描述

每一种材料的力量由一个十进制整数表示。

对于一个武器,由两种材料构成。假如第一种材料的力量为 X=x1x2xn¯,第二种材料的力量为 Y=y1y2yn¯,那么这个武器的力量为 i=1n|xiyi|,也就是 |x1y1|+|x2y2|++|xnyn|

如果两个数字长度不一样,则要将短的数字用前导零补成相同长度

现在,你拥有无数个力量在 [L,R] 中的材料。你想要选出两个材料做出一个力量最大的武器。请你求出你设计出的武器力量的最大值。

题解

找到第一个不同的地方,其他地方全部填 |90| 即可。

大数填 0,小数填 9,这样一定满足在区间内。

提交:Submission #211191108 - Codeforces

C.Game with Reversing

题目描述

你有两个长度为 n 的序列 S,T

你将不断重复以下步骤直到两个序列相等:

  1. S 或者 T任意选择一个数字,然后修改为另一个数字。如果此时序列相等,则结束操作,否则进入操作 2。

  2. 任意反转一个序列。如果此时序列相等,则结束操作,否则重复操作 1。

注意:操作 1 和操作 2 都计入操作次数中。

你需要输出最小化的操作次数。

解题

正序和逆序分别讨论一下,取 min 即可。

icnt 表示正序不同的个数,rcnt 表示逆序不同的个数。

那么 ans=min(2×icnticnt%2,2×rcnt(rcnt1)%2)

提交:https://codeforces.com/contest/1834/submission/211198802

D.Survey in Class

对于每一个学生的学习集合,答案是 2×max(|S1||S1S2|)

O(nlogn)

考虑使用树状数组维护线段,从左向右扫一遍。

O(n)

考虑两条线段的关系,三种:

  • 左边

  • 相交

  • 右边

对于每一个 S1,我们需要最小化 |S1S2|,所以对于三种情况,我们维护三个线段:

  • 右端点最左

  • 最短

  • 左端点最右

分别判断即可。

提交:Submission #211192375 - Codeforces

E.MEX of LCM

我考场上的做法

考虑只有 O(n2) 个取值,那么 mex 一定 n2。所以我们限制了答案的上界,设为 U

实际上有更紧的上界,根据:CF1834E MEX of LCM 题解 - LCTTTTTTTTTTT - 洛谷博客U 可以 =4256233

考虑对于一个固定的右端点,其左端点与其匹配的 lcm 是单调的,并且不同的数量在 O(logU)

考虑每一次变化 lcm 至少 ×2

所以考虑用一个 set 维护。

同时,再用一个 set 维护所有出现过的 lcm (考虑是 O(nlogU) 个,空间没问题)

所以总复杂度为 O(nlogVlogUloglogU)

提交:Submission #211194246 - Codeforces

还有的思路

考虑每一个左端点,可以二分找 lcm 的分界,当值大于上界的时候退出。

用桶或者什么东西操作一下即可。

复杂度为 O(nlogUlogn)

然而还有玄学优化,参考:出错了 - 洛谷

posted @   jeefy  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示