战报:从NOI Online到省选

NOI Online是刚好半个月以前的比赛,今天刚刚考完省选二试,正好一起作个总结。

一.考试内容总结

首先从我的体感上,虽然省选的难度实实在在的仅次于国赛,而且打开洛谷一看,省选很少有“省选”题,全是一面一面的黑题,而往年的NOI Online(其实也就两年)难度离谱到入门组比提高组还难(离谱的地方就在于,还真不是提高组太简单,捂脸)。但是今年我感觉省选的题还真的没有之前几周的模拟难度大,而NOI Online则是看着不太难而实际上非常恶心。

先总结一下NOI Online,往年的都是三道蓝题或者黄题、紫题、黑题各一道,但是再看看今年的配置…
在这里插入图片描述

我必须吐槽一下,这个愤怒的小N作为一个纯数学黑题,被放在了T1…

由于NOI Online难度不会难到一点儿清晰的思路都没有,所以我的计划就是直接去研究一个小时的T1,然后再接着往后研究。结果就是,我T2T3加一起也就花了一个小时左右写个(高级的)暴力,而剩下接近两个半小时都在想T1。
我看到这个T1想到的主要是递推+数学,然后全程一直在考虑怎么找规律,毕竟模拟生成过程太慢了,而且数组会特别大,加上这题给的数据限制是以logn为单位的,所以基本上就没有什么暴力模拟的事儿了。结果就是,真的没找到……
后来我周游列国一圈之后,发现有一些人想到了二进制规律,但是实现起来我会的也就是DFS暴搜;还有一些鬼才先写了个模拟找结果,然后打了个巨长的表,以至于不得不卡文件大小限制。总而言之,大家都没有什么明确的规律。后来考完试一看题解,整整三页数学推导,根本看不懂,视觉效果比任何一种特效都震撼。
除此之外,考试系统在最后十分钟崩溃了,导致我T1写的10分暴力没有交上去,然后就因为这十分被卡在25%以外。所以说,只要是大赛,时间规划思路还是不能太浪啊(捂脸)。
T2写了个哈希优化,在考完试看了题解之后改到了90分,然后加了快读快输(人生头一回用)之后神奇的卡到了999ms过了,虽然我确信不是正确的AC方式,但是通过率高达50%以上,这算是我竞赛生涯搞的第一次玄学优化。
T3就直接按照题干给的规律写了个模拟,不知道为什么只得了10分(看数据应该是20分),大概是被卡掉了一部分。总之也没怎么动脑子就是了。

总的来说,NOI Online考的其实还可以,就是实在有点儿遗憾。一方面是节奏控制的不太好太浪了,另一方面也是搜索动规这些拿部分分必要的操作方法不算太熟练。不能说是什么印象很深的大赛经历,只能说是感觉上比较普通(当然看到T1题解的那一刻还是非常震撼的)。

然后是省选。

省选一试的前一天,根据有大赛经历的dalao的建议,我晚自习请了假去练习了一下Linux系统的操作,操作意外的不算太难,终端在桌面一右键就打开了,而且操作终端也不算是很繁复,不比Dev的麻烦多少。Emacs的操作系统有点儿乱,而且输入光标是小方块(学哥狂喜),所以我选择了gedit(注意,以上全是伏笔)。
结果一试的时候,我完全不会用Emacs,然后寻找终端的时候,右键并不能打开终端,在应用程序里面找了一圈也没有发现(据说应用程序里面也是有的,可能是我眼瞎了)。因此我就在没有编译器的情况下完成了这场4.5小时的比赛。
更糟糕的问题是,我由于太久没有搞正规比赛了(吐槽自己一句,NOI Online难道不是两周前才考完吗),freopen格式记得不是很清楚,不知道源文件上面要不要打双引号。按理说这种事情平常很容易解决,反正F11一巴掌上去CE就打没CE就接着写就完事了;但是当时我并没有编译器,结果我就没有打双引号。
因此我考完试不到一分钟就已经明确的知道自己考多少分了。

顺便一说,一试的T2这题有不少点是特殊情况约束的,这些点还是很容易解决掉的,但问题就是,如果又想拿到特殊情况的分,又想暴力解决掉前面几个比较小的点,程序里面会有一大堆判断、一大堆分类,一片一片的if-else。恰巧Linux里面可以用的这些东西都没有符号自动匹配,加上gedit非常烦人的tab设定,导致写的时候不用编译器一遍成功是真的非常累人…

还是简单的说一说这三个题,T1我当时直接写了个DFS拿前面10分,后来和dalao讨论,结论是用链表+二分可以切掉,具体的怎么操作我还真不是太懂,回头可以接着研究研究。

T2是我花费时间最多的一道题。这题3x3和m=2两个部分分比较容易得,一共大概值40分。这题如果只考虑怎么填其实还真的不是太难,但是1e6的限定就非常恶心,因为这会严重影响缩小的策略。对于m=2的问题,原来是只填一列,另一列全是0,为了解决这个问题,我把原来一列的数一分为二填到两列里面,再看会不会超1e6;3x3我就确实不会操作了,还是只能缩小,很可能会被卡掉这10分。这个题我一开始没有注意到1e6的限定,直到研究3x3的策略,发现样例3好像合法之后才注意到,于是我又回去改了一圈,导致主函数里面是一片混乱,一层一层的判断,不得不说从这方面来讲我非常佩服我的毅力(捂脸)。总之这题题意很简单,但是确实很值得思考思考,而且难度确实不小。这题正常来讲我做题体验应该还不错,但是没了编译器就真的是完全没一点体验了。

T3是一道图论,我第一反应就是Dijkstra暴力解决,确实是没啥好想法,所以也就这样了。

再说说二试,二试的时候首先解决掉了终端的问题(Ctrl + Alt + T)和freopen的问题,所以起步心情莫名的非常好。

T1就是一个图论,而且还是比较复杂的那种,我是做完了T2才回来做的。首先这题拿宝石有顺序,这种顺序是严格的一个接一个的,而不是什么LCS,而这题还要兼顾最短路,用Dijkstra一边走一边存又不太现实,所以需要加一堆判断。这题判断有一个难点:例如现在拿出来一块宝石3(序号),我们不知道这块宝石是123还是3,所以不能简单的minmax就解决掉。这地方除了len[i]负责跑最短、dis[i]负责存值以外,还用了一个ori[i],用来判断走到这个点的时候拿到的宝石是一块单独的(也就是并不能加到dis数组里面),还是按照存储的顺序拿到的(可以加入dis数组)。其实判断并不是很繁复,比较容易操作,大概调了几遍就解决了,复杂度大概O(n2logn),看时间复杂度值10-20分(很遗憾,我忘记是值2个点还是4个点了)。除此之外还有一个一连串的数据,但是n太大了,我思考了很久也没想出来怎么解决,所以这25分没写出来。

T2乍一看乱八七糟的,又是a又是b,然后还要求加的b单调不减,要求加完了还得是第一名,我花了十分钟才看懂样例怎么来的。这题我直接用了DFS模拟(高级暴力)取的过程,其实是基于全排列的,看这种排列需要加的b是否超过了m,不超过就++res,否则略过。说到b的问题,为了让某个数加b能成为第一,如果这个队序号比现在的第一小,那么加到和第一一样就行了,否则加到比第一多一。这样一来就产生了新的第一,然后反复操作,直到操作结束为止。
由于加的时候总是希望加的越少越好,那这样肯定是希望第一名越小越好。这样我设想可以用一个单调队列存结构体,如果较小的都已经超出m了,那么剩下的部分就完全不必再操作下去了,可以省不少时间。只不过我重载运算符不熟悉,没有写出来,不然可能再多得10分。总之最后时间复杂度略小于O(n!),理论上值60分。

T3就比较惨了,最短路一看就不靠谱,并查集又不知道怎么搞,于是就直接放弃了。

总之二试思考的时间还是远远多于写代码的时间,T2挺有意思,T1比较烦人,反正是比前一天的情况好多了(最起码能得点儿分)。

省选我觉得相比于NOI Online非常有大赛的感觉,而且给我留下了非常深的印象(55 – 0),而且题的难度也确实非常大,但是答题体验挺好的。

体验很好,很满意,明年再来.jpg

二.备考期的总结

最早我准备考试的时候,我爸问我这段时间多练一些东西是不是可以多得一些分数拿到个什么奖项之类,我当时的观点大概是这样:我一个月后去省选与现在去不会有任何的差别,本来我也什么都得不到。重要的不是考试,更多的是备考的状态。
现在看来,还真就是这么回事。

先看看我当年给自己立的flag:(3月18日)
在这里插入图片描述
从现在的情况来看,这三周我整完了50道openjudge的dp(一共59道,做的相当一部分确实是水题。剩下的题实在是太难搞了),复习完了BFS,做了一些搜索。二进制了解了一些,倍增复习了一点,还自学了一点儿数论,不过树的知识确实是一点都没来得及复习,总的来说基础内容算是比较完备了,我觉得可以说是做到了80%(毕竟树的知识也没学多少)。
从2月最后一周到现在大概一个半月,YBT那些一个比一个变态的题整了45道,opjDP带搜索还有递推递归也做了差不多60道,如果算上上课做的这些东西,这一个半月已经做了最少120道题了,感觉强度再大一点都快能赶上上学期三四个月的进度了。我想这个大概就是除了大赛经验以外省选最重要的东西了。
之后一方面打算回去预习数理化准备高二停课,一方面打算多学一点树的知识、学点数论、学点哈希(这几方面是我目前相对最差的,就是基本上一点儿都不会,我们的机房dalao这些东西自学的都已经可以相当得心应手地应用了)。
CSP也就剩不到半年了,信竞生涯也已经过去了很长一部分(对于大部分人就是过半了),但是感觉要学的东西再来一年都学不完。

总之这次省选本质上来讲还是去练兵,确实没有什么太大的压力,一试爆零了心态也没有崩(反而整的二试心情很好,捂脸),尽管一试没有编译器,这两天整体上节奏也算是很稳健,gedit也用的熟练了一些(尽管tab初始设置这事儿还是很恶心人,没有符号匹配还是很难受),这一次经历还是非常重要的。
如果非要概括经验,大概如下:
1 以后一定要多熟悉熟悉Linux系统。
2 以后写代码最好简化一些if-else之类的分类讨论。
3 学过的东西(尤其是很实用的)最好还是多练练。
4 考试之前一定要准备点儿应急预案(比如学个Emacs之类的)。
5
freopen("a.in","r",stdin); freopen("a.out","w",stdout);
CSP再见。

printf("24 OI Fighting!");
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值