NOIP模拟赛2021/11/10

比赛时间安排

7.50-8.10
t1 觉得是简单的模拟,刚开始想的是线段树
t2 一看kmp,暴力分直接把n*m<=1e6的字符串搞出来,做一次kmp就行
t3 是个看起来非常明显的。。贪心?感觉已经有思路了,但是还没有证明正确性。
t4 一看是拓扑排序的样子?感觉链应该能拿分

8.10-8.30
t2暴力写完了,测了一下样例过了

8.30-8.40
t3的贪心,从大到小排序,每次组队就按里面最大的那个人的要求,然后自己造了几组样例,过了,题目的样例也过了,觉得没啥问题(结果正解是dp,果然有问题(笑哭))

8.40-9.00
写t4链的情况,写的过程中突然发现,这个好像不是拓扑排序的那种,因为有可能1号节点也只有一个度,就也被删掉了,所以重现思考了一下,链的情况就是从两边向中间断。如果u=v,那么还是原来的,其他情况就是看左右两边离端点更远的距离

9.00-9.50
考虑数的情况,既然链的都这样处理了,那树上应该类似吧,自己画了个样例观察,发现,树的直径是断的最慢的一个,那么就是先求树的直径再在上面做链的情况?!(如果u=v)于是就开始写了,其实9.30就写完了,但是我用freopen试大样例的时候打不开,一直报错。然后我以为是freopen打错了,就开始看,再看也没有问题,然后我测试了一下之前交的代码,也没法用freopen打开样例,我懵了,然后尝试自己手写了一组数据,用freopen打开,发现没问题,那不是我的问题,就是样例的问题了。确实,我发现后面没有.ans,.out之类的!!!我刚开始还吐槽了,不知道哪个是输入哪个是输出,原来是我没开扩展名。。。开了之后就过了

9.50-10.40
开始写t1,我一看分值,5分要上线段树!?我懵了,根本不想写,然后再一想,直接o1就行了,我设一个偏移量,然后每次计算的时候+±-,改变要找的数就行了,然后集合的话用一个数组,当然map复杂度太大,而1e6的偏移量能接受,空间够,于是就用数组写了一下。但是我发现复杂度非常大,因为在m1e5的循环里面,我有一个memset的操作,非常耗费时间,样例两组都过不去,先交了,然后开始像优化

10.40-11.40
1个小时啊!!我想用set去优化了,改了一下,发现跑的飞快,但是遗憾的是答案不对。。。然后我改了一下偏移量的±,还是不对,但是答案接近了,然后又把原来用的标记数组删了用set代替,结果更不对了,发现确实是偏移量的问题,我把这个再调整一下,发下∪的操作对了,但是∩的操作还是不对,非常着急,看着时间一点点流逝,我就一直改着,然后最后放弃了,打算用一个循环暴力塞,结果它过了。。。。没t。看来以后还是得先暴力再优化啊o(╥﹏╥)o

11.40-12.10
虽然时间不多了,但是我想着t2应该是能想出来的,毕竟已经搞了很多了,而且又是这种有循环节的,于是我发现它每次重复那么多遍,那么肯定至少能匹配的长度是(n-1)*m,剩下的单独做一个kmp就行了,于是我赶紧写一下,发现答案有对的有错的,还好有小样例,我发现,只判断一个串是不对的,因为当已经匹配了(n-1)*m的长度的时候不能单纯的看下一位,有可能是 ovezoovezoovezo,这样虽然最后一个数字能匹配1个,但是加上去之后就不匹配了,然后我就,懵了。不知道怎么灵光一现,想着那匹配两倍试一下吧,于是试了之后发现大样例过了,狂喜

赛后总结与反思

  1. t1set的操作其实最后已经可以变成数组的操作了,但是当时因为觉得det过了,太开心了,以为不会再t了,但是还是t了,没用更优的做法,时间复杂度也没算好
  2. t3没想到dp,看不出来,真的感觉不明显啊。。
  3. 没把准备工作做好,扩展名耽误时间了,不然还能再想一想t4

与正解的差距

t1

用了set,复杂度略高,t了,用数组的话,∩的操作可以用f数组标记,如果同时在a,b中把bj++,这样就不用再memset了

t3

一道酷似贪心的dp
首先普通dp是可写的,但是还没有暴力分高,不过这个思路和张老师发的基础作业很像,大概掌握了,枚举每个区间的右端点,再枚举左端点转移
优化版就用到思想:正难则反,反着去考虑转移,使复杂度到O(n),这个思想很重要

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值