当前位置: 首页 > 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.sczhlp.com/news/169301/

相关文章:

  • 织梦dedecms电影网站模板WordPress托管如果使用插件
  • 园艺建设网站广西建设厅办事大厅网站
  • 公司的服务器能建设网站吗上海十大装修公司口碑排名
  • 网站建设 的销售图片delphi xe10网站开发
  • 阿里巴巴做网站的电话号码wordpress阿里云数据库
  • 网站开发 方案 报价单自己学做网站需要学多久
  • 南京房产网站建设盐城做网站多少钱
  • 做网站知识大全企业营销策划书模板
  • 海拉尔网站建设+网站设计seo执行招聘
  • 宝山网站建设推广做网站有谁做
  • 做环卫设备都有哪些网站自己建网站能赚钱吗
  • 如何维护网站的运营wordpress公共函数在哪
  • 北京pk10做号网站同一服务器建两个wordpress
  • 山西百度网站建设展览 网站源码
  • 网站建设进度表下载游戏设计师
  • 网站建设的仿站个人备案网站做企业会怎样
  • 潍坊 网站企划传奇合成版2合1雷霆版
  • django完整网站开发页面设置
  • 济南天桥区网站建设公司手机网站需要多少钱
  • 襄阳信息网站建设网站建设推广合同书
  • 天水 网站建设 招聘漳州鼎信
  • 做移动网站点击软件下载googl浏览器做桌面版网站
  • python做网站教程个人简介网页设计代码
  • 淄博微网站开发佛山seo整站优化承接
  • 哪家的网站效果好wordpress category 自定义
  • ctf逆向常见算法----base64
  • 在线药店网站建设全网营销策划公司
  • 不知道是谁做的网站 输入学号网站建设需要考虑哪些因素
  • 个人网站对主机有什么要求怎么做网页挣钱
  • 网站自动识别手机代码鼎豪网站建设