JZOJ 2022.02.10【提高组】模拟总结

简要题解

GDOI2012 的题
不得不说当年的题做起来真的很不爽
整体看起来就是数据结构+博弈论+宽搜+背包dp优化

考场上 T1 十分钟解决过了
看完题就知道多开点线段树或树状数组维护原序列和同颜色序列就行了
线段树的话可以线段树上二分做到一只 log
树状数组就得套个二分上去要两只 log
不过树状数组代码太短了,又不容易出错,必须得上它啊
尽管是两只 log,不过能够就好了

T2 交替搜索记忆化稳拿 30pts 也过了
尝试发现性质发现情况还想有点多。。。
赛后听讲题人的明白了一个巧妙地转化
把每个 1 前面的 0 数量弄出来,必败状态就是将这些数字削成 0
移动操作相当于给一个数 1,或同时给两个相邻且大小相同的数 1
两个结论:偶数对胜负无影响,三个相邻且相同的数也一样,都可删去,只考虑简化后的数列
简化后的数列是由一些不相同的数和若干对两个相邻且相同的数组成
然后必败态就是第一种数个数和第二种数对个数都为偶数
证明考虑把偶数丢给对方,对方丢过来必然是奇数,削成偶数仍回去,直到为 0 便胜了

看了 T3,犹豫了一会,这大力模拟暴搜真能打?一不小心血本无归,太亏了
于是先搞 T4,很容易发现相邻两数交换位置不影响之后的数
考虑相邻两数换不换,按 a.d+a.rb.d>b.d+b.ra.d 排序即可
排序就就有了亮招的相对顺序
然后考虑一个数选不选与 L 的限制即可
明显的一个背包,正序转移不方便考虑倒序转移
然后发现一个 bug,最后一招不管 L,可以不按排序顺序,最优当然选剩下的 d 最大的
也就是说要枚举最后一招,O(n2L)
考虑优化,如果把招数按 d 从大到小排序后枚举最后一招,想想最多枚举到哪
考虑 k 前面的 l 的和已经大于 100,意味着枚举 k 时前 k 个数至少有一个选不到
如果选了后面的任意一个为结尾,前 k 个至少有一个选不到,所以不如选前 k 个优,故不必继续枚举,就成 O(nL2)
大可把 l/2 优化

posted @   leiyuanze  阅读(70)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示