【题解】Solution Set - NOIP2024集训Day77 反悔贪心

【题解】Solution Set - NOIP2024集训Day77 反悔贪心

https://www.becoder.com.cn/contest/5747


「AGC018C」Coins

在没有 x,y,z 限制的时候,每个人一定取三个数中最大的那个。出现超出限制的,反悔调整。

打了,但是没调出来:https://www.becoder.com.cn/submission/2698286


https://www.luogu.com.cn/article/cftakc2x

其实,我们可以先钦定所有的人都取第一个数,然后再选 y,z 个数来调整,这样只剩两个就不用考虑调整的时候目标堆也满了的情况。



「AGC007F」Shik and Copying String

转化一下题意:相当于是每次可以选择若个个连续段让每段都变为这一段的左端点。

https://www.luogu.com.cn/article/5yo6b4jn

(md,之前就是想的这么转化题意的,但是有点没理清楚就没管了。😥

(好的,让我们继续思考。

既然是不能有交,那么每个路径就要尽可能的靠右。

考虑对每个 ti 从后往前找它的路径,路径尽可能靠右,那就要尽可能紧贴后一条路径,我们只需要把之前的折线向左下平移一个单位,然后看一下最上面是否需要新折一下,或者有一些折是多余的,用一个栈维护一下当前的路径上的拐点就行了。

注意到如果后一个路线在最后一行拐弯了那么一定会增加一列,由此更新答案。


「CF335F」Buy One, Get One Free

(FAKE

考虑排序后,买最大值送严格次大值,最后一定剩下若干个相同的值。

可以反证,在不考虑剩下的相同值时,这样的策略是不劣的。

现在考虑剩下的这些相同值,她们无非就是直接买,或者被权值更大的送。

调整一下就行了。

bf:https://www.becoder.com.cn/submission/2698378


虽然但是,OJ 数据水的像什么一样,CF 上面光荣的 WA 了。

Hack:

6
10 8 7 7 5 4

问题在于,一开始那个 “买最大值送严格次大值” 的策略是错的……(只有在 ai 互不相同的时候是对的,直接推广到有相同的时候就有问题了。

那么我们不妨对每组相同的元素都考虑上述反悔的过程。

https://www.luogu.com.cn/article/uuzg6nwk

当前枚举到 ai,一共 ci 个,考虑拿一个单调队列 q 维护 i 以前因为送得到的。

sum=j=1i1cj

对于这 ciai

  1. 首先,p=min(sum2|q|,ci) 个派一定是可以因为之前买了但还没送的那些,来补送的,也就不要钱。直接加入 q

  2. 其次,剩下的部分中多余 sump 的部分一定只能掏钱买(因为前面的再多也不够送这些的了。

  3. 最后,再剩下的 min(cip,sump)ai 就可以掏钱买或者和前面送的那些争宠。

    考虑和 q 里面的元素比较。设 x 为当前 q 内的最小值。

    1. x>ai

      现在决策仍不明显,我们考虑在 q 中加入一个 2aix 的派。可以发现后面的情况进一步确认了当前的决策。具体的,最终的 q 中:

      1. 仅存在 2aix:相当于我们买下 x 换得两个 ai
      2. 仅存在 x:还是花钱买了两个 ai
      3. 同时存在 x,2aix:不买 x 但从别处获得了两次送的机会来得到两个 ai
    2. x<ai:(因为存在 2aix 的虚拟派,所以需要考虑这个

      可以发现买下 x 送两个 ai 一定更优,于是删去 x 将两个 ai 加入 q

注意实现的时候,因为只有严格小于才能送,所以同一个 ai 新加入 q 的元素要先缓存一下,考虑完这 ci 个再统一放入 q 中。

posted @   CloudWings  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示