NOIP模拟赛2021/11/12

比赛时间安排

7.50-8.05
t1,只有7个人,我是不是能直接贪心?【滑稽】
t2,期望,不会啊
t3,字符串的题,而且是匹配类,kmp?
t4,感觉怎么是一道模拟题呢

8.05-8.30
想着写t1吧,贪心思路是先选前7个,一共两个限制条件,如果第一个不满足,就把整体 往后移动,如果第二个不满足,就把第二组和第三组整体往后移动,然后有一组合法的就直接输出,写完之后我还自己证了一下,觉得很合理,就没再管了(谁知道cxy告诉我不对!确实有可能不连续)

8.30-8.42
本来想写t3的kmp的,但是一看不能有重复的部分,就先不想了,写了暴力hash判断,非常顺畅,直接交了

8.42-9.00
按照题意用set模拟了一下,测了大样例也没有问题,时间跑的也挺快,就交了,oj竟然给t了?!

9.00-9.50
我看了一下别的题目,没什么可以发挥的空间了,就去写t4了。
考虑si=1的情况,每个人都拿走最大的,那么其实每次加进来一个数,被取走的集合最多只会变化一次,而这个变化可以o1求,所以就是先预处理只有第一个数的情况,然后再判断新进来的这个数是否比原操作集合的最小值小,因为如果小的话,这个数一定会被选走,然后更改答案就行了。拍了没错,就交了

9.50-12.00
那顺着这个思路,我妄想写出正解qwq
那正解思路我觉得和这个应该很像,依然是先预处理,不过这次要维护两个操作集合,分别去找最大值和最小值,然后替换
找的时候首先要保障值,然后要保证这个值一定是最先选择的,才能被更新,然后就用了set里套结构体。写完之后发现错了,然后开始查错。自己手推了一下数据,发现有可能某个集合没用的元素,在另一个集合会被用到,然后我就进行了两边work,结果还是不对。想到如果要再次被用,那么这个值被选择的编号时间也有要求,所以还要加一个这个判断。然后又错了。。。。。最后发现是因为在赋值之前,我改变了w的值,导致错了。。崩溃啊!o(╥﹏╥)o
然后小样例拍了几分钟都没出错,我以为要过了,但是大样例一下就不对了,麻了。只能自己再想一想哪错了,我发现是因为我每次只找最值,但是真正被修改的编号并不是这个最值的编号,而是第一个比w大的,最先修改的值才是,人傻了,根本不会维护,时间也快到点了,就随便先交了

赛后总结与反思

  1. t1还是想的太简单了,一定要先打好暴力再想正解,尤其是贪心,很可能出错
  2. t3是ac自动机,能看出来一点,但是因为太久没写,也非常不熟练(不过好像noip不考诶)
  3. t4的想法非常好,能慢慢去推正解(但是好像推错了),这种能力要培养起来!

与正解的差距

t1

虽然不是正解,但是这个暴力+剪枝是真的强
把能想到的后面肯定不合法的情况直接全部break,然后找到一组答案一定是最优解,直接输出
里面的特判我在贪心的时候想到了,但是没打暴力,也不知道那么快,和dfs的那种剪枝有得一拼
正解是用的二分,这个思路没想到,但是其实仔细想一想,求出那关键的2个点的位置是在求解,那我就可以转化成验证类问题,验证它在这个位置上行不行,下次要多尝试二分

t3

既然是多串匹配,就应该看出来是ac自动机,本题只需要在ac自动机上修改一下就行了,是与dp结合。算法已经快忘了,不过感觉修改的一点还是能想到的,是个比较基础的dp

t4

感觉我的想法和正解已经非常接近了!!(真的吗)
但是最起码我的第二档分写的是对的,思路也是正解的思路
我最后的方法是开两个set,分别记录1,0的操作序列,但是正解是每一段连续的字符都开了一个set记录,具体操作是一样的,但是这样一来,关于谁先选谁后选就被区分开了(我把它们全扔一起了),但是这样写会t,所以一个优化就是把能合并的操作合并起来,这样子就防止被010101卡,至于为什么能合并,又是找了一个性质,这个就不多说。
核心的优化其实就是在于把操作化简,想之前的取交,标记不能再要都是把最耗时间的操作变成O(1)的,非常巧妙

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值