当前位置: 首页 > news >正文

20251005 模拟测 总结

\(\mathcal{Preface}\)

分数分布:\(100+100+100+100= 400\)

AK 了,开心呀!

\(\mathcal{Problem \space{} A}\)

Tag:诈骗,排序,贪心。

赛时看到题,一下子没反应过来,以为是超难 DP 题。

过了 B & C 之后回过头来看,原来所有金币的消失时间是互不相同的呀!那么这不就是个诈骗了吗?只要等到每枚金币最后消失的时间再去取它就好了,因此这就变成了一个简单的排序加贪心,只要将所有金币的价值从大到小排序,然后贪心选取前 \(k\) 个的价值加起来就可以啦。

时间复杂度 \(O(n \log n)\),瓶颈在于排序。

\(\mathcal{Problem \space{} B}\)

Tag:简单数学,贪心 / 暴力枚举,判断。

首先可以运用一个简单的数学知识,如果两个数的加和相同,那么这两个数的差越小,它们的乘积就越大。

那么就可以从最高位开始找到第一个不相同的位置,然后标定 \(a\) 为较小的一个数,之后就都让 \(a\) 的数位比 \(b\) 的数位大就行了。

但是这题还有一个法子,因为 \(a,b < 10^5\),因此暴力枚举也是可以的,这边采用了状压的形式来枚举要交换哪些位置,也就是枚举二进制数 \(st\),如果这一位的值为 \(1\) 说明要交换否则不用交换。算出值以后挨个取 \(\max\) 就可以了。

如用贪心法,时间复杂度为 \(O(|a|)\);如用暴力枚举法,时间复杂度为 \(O(2^{|a|} \times |a|)\);在这里,\(|a|\)\(|b|\) 是没有区别的。

\(\mathcal{Problem \space{} C}\)

Tag:简单思维,高精除。

想到一个等式,\(k \space{} 个空瓶子 = 喝 \space{} 1 \space{} 杯饮料 + 1 \space{} 个空瓶子\),然后把右边的 \(1 \space{} 个空瓶子\) 移项到左边,变成 \((k-1) \space{} 个空瓶子 = 喝 \space{} 1 \space{} 杯饮料\),那么直接高精除,用 \(n \div (k-1)\) 就可以了。余数是不用在意的,因为多出来的饮料瓶没办法再换了,因为它是余数嘛!

时间复杂度 \(O(|n|)\)

\(\mathcal{Problem \space{} D}\)

Tag:STL 的运用,贪心。

我的做法和老师的不一样,麻烦老师看看我这个做法有没有什么漏洞 /kel

由于我们只能按照病人的病情严重度来依次医治——如果不考虑到来时间的话——而又因为病人的病情严重度互不相同——所以在某一时刻可以医治的病人是唯一确定的!不存在说有多个病人病情严重度相同,然后还要用 DP 合理分配的这种情况。

所以就是说,当时间确定的情况下,需要一个容器能够合理存储下当前还没被医治的病人的情况,并且还要按照病情严重度从重到低排序。想到了什么?对,就是优先队列 priority_queue!当然,需要塞进去一个结构体,因此需要重载比较符。

考虑将所有病人按照到来的时间排序,然后依次考虑每个病人。为了更好地维护当前医生要医治的时间可以是什么时候,用 \(NowTim\) 变量记录医生当前做的最后一次手术的结束时间再往后一刻是什么时候,即当前的时间。最初,\(NowTim = 1\)

每次进来一个病人之后,我们先考虑这个病人到来之前的情况。那么不断取出优先队列的队头,如果现在所剩余的时间足够医治这位病人——也就是说,医治完他,并不会被马上要进来的这位病人发现——因为如果被发现了也许会发生医闹——那么就医治他,并加上医生能够得到的金币。当然了,\(NowTim\) 的值也需要更新。

但是如果 \(NowTim\) 的时间比当前取出队头的这位病人的到来时间还要早,我们该怎么办?可以看一下,如果让这位病人一到来就做手术,时间是否足够。如果足够,可以先让 \(NowTim\) 改为这位病人到来的时间,然后再给这位病人做手术。

循环的中途,一定记得判断一下,如果当前这个病人的到来时间 \(> k\) 了,也就是说在医生已经下班之后才来的话,就直接 break 掉好啦,因为医生根本见不到他,当然就不需要考虑他咯。

循环结束了,就搞定了吗?不对,我们还要以结束时间为 \(k\),继续再跑,直到医生下班才能够结束整个情况!因为可能在所有病人都来过之后,继续医治嘛,这是很正常的现象啦!

记得开 long long,然后中间有些许小细节要注意一下。

时间复杂度 \(O(n \log n)\)

\(\mathcal{Summary}\)

这一次能 AK 的关键还是在于 D 想出了一个应该没啥问题的做法,然后也是因为前三道题做的比较快才给 D 预留了足够的思考时间。因此,根据这次的经验,我认为,如果要去攻破后几题甚至是压轴题去拿到一个比较高的分的话,有一个至关重要的点就是前面的题不能卡太久,要给后面的难题预留充分的时间,这样子就算是暴力可能也能拼出来更多吧。

继续加油,再接再厉!

http://www.hskmm.com/?act=detail&tid=25362

相关文章:

  • 基于Python+Vue开发的体育用品商城管理系统源码+运行步骤
  • 完整教程:Microsoft Word使用技巧分享(本科毕业论文版)
  • (转)The Ten Commandments of Digital Cotrol(Part1)
  • ctf逆向常见算法----base64
  • 02020409 EF Core基础09-一对一、多对多、EF Core基于关系的复杂查询
  • 02020503 EF Core高级03-分页查询、IQuerable底层的实现形式、DataReader、DataTable、EF Core中的异步方法
  • 02020502 EF Core高级02-IQuerable会延迟执行、分部和动态构建IQuerable、IQuerable的复用
  • 在 PyCharm 中,环境:bert_env , 执行 import wandb 报错。但是,在CMD窗口,环境:bert_env , 执行 import wandb 正常。
  • Linux_T(Sticky Bit)粘滞位详解 - 详解
  • P2831 [NOIP 2016 提高组] 愤怒的小鸟 题解
  • 库存中心(三层库存模型)
  • Valley靶机渗透实战:从凭证复用到Python库劫持
  • 10.05模拟赛反思
  • MariaDB收购SkySQL增强AI与无服务器能力
  • 单片机寄存器的四种主要类型! - 实践
  • TDengine 高级特性——读缓存
  • 非合作博弈之软性均衡:东方智慧与西方理论的融合框架
  • 如何快速搭建spring-boot工程 - murphy
  • Ai元人文:东谈西论——非合作博弈之软性均衡
  • 反向传播与梯度下降:神经网络如何真正学会分类
  • Spring Cloud Alibaba微服务开发
  • OI 各种东西的板子
  • 价值弥漫:AI元人文的场域革命与共生之路
  • 做题记录 #1
  • 阿爸阿爸
  • 深度学习优化器算法巧思速览
  • 完整教程:LangChain完全指南:从入门到精通,打造AI应用开发新范式
  • NDK开发与实践(入门篇微课视频版)
  • 调了很久的代码总结
  • CF700E