【干货】NOIP 2017提高组比赛体验篇(一)

网友投稿 2018-03-11 15:41

      转眼间,NOIP2017(全称是全国青少年信息学奥林匹克联赛,简称NOIP)就这么过去了。小文在这之后搜集整理了很多有关参加这次比赛的选手们一些经验感受,让下一届同学们能从中获益

    (以下是其中一位某校选手的赛后总结,高二,小李)

NOIP2017初赛

    回望这2个月,既有参加NOIP的激动,也有赛场上一些失利的遗憾。想一想,我应该给自己总结一下吧,今年的初赛,由于是到了提高组,选择题有5题改成了不定项选择题,就是一题可能会有多个答案的,这就比较难,于是我就提早了很长时间去网上搜罗提高组初赛的真题(明年一样可以用呢),提早很多做(然而最后并没有刷完所有真题),考试前还慌慌张张的复习组合的知识。在考试的时候,看到第一道选择题就懵逼了,Pascal语言什么时候退役?我不知道啊。

    开场以后,我极其认真的做每一题,但是发现速度不够快,做完选择题已花了很久,做问题求解的时候,一看是不是什么对偶图最短路,发现手模就可以做出来。等我开始做读程序写结果的时候,坐在我左边的杭二高三巨佬已经快做完了。

    终于,我做完了所有的题目,时间已经不足10分钟,我又检查了一圈,查出了一些错误,在心慌中,初赛结束了。

    一个星期以后,成绩出来了,我好像是95.5,省里排名rank20,遗憾的是错了3题选择题啊,明年要好好努力,但总算是过了初赛这到坎。

NOIP2017复赛day1

    NOIP的day1,是我第一次考提高组,无比认真也又十分激动,前一天晚上还在复习各种知识,生怕考到的知识没掌握好(以下链接是洛谷网站题目表述)

· day1 T1 小凯的疑惑(math) 
https://www.luogu.org/problemnew/show/P3951 
    开场第一题,发现好像是数学题?(考试后有人说用扩展欧几里得,我学的不好啊)场上推了一下,推出了答案是(a-1)*b-a 
    怎么推(猜结论)的呢? 
    首先,数据保证有答案, 
    然后,考虑a的倍数一定是能取到的,那么不能被a整除的数除a的余数(除了0)只有a-1种,由于有条件:a和b是互质的,所以设x=b%a(x!=0),那么大于等于b的模a余数为x的数都能取到了,b设y=2*b%a(x!=y),所以大于等于2*b的模a余数为x的数都能取到了…以此类推,因为有a-1种余数,所以最后一个取到的余数是(a-1)*b%a,这个余数的上一个数是(a-1)*b-a,所以答案就是这个。

https://cdn.china-scratch.com/timg/180313/154150HK-0.jpg

· day1 T2 时间复杂度(complexity) 
https://www.luogu.org/problemnew/show/P3952 
    快速的打完T1,就可以开T2了,一看T2,感觉就是一道模拟题嘛,考验代码精细的时候到了。根据题意,很自然的想到维护一个栈来处理,用几个变量记录是否有语法错误、最大的答案,在退栈的时候清空数组,读入的时候写的有条理一点,就好了。

https://cdn.china-scratch.com/timg/180313/1541514500-1.jpg

· day1 T3 逛公园(park) 
https://www.luogu.org/problemnew/show/P3953 
    不到1个小时打完T1、T2,就摩拳擦掌的准备T3了,T3是什么啊?一看到题目,有点懵逼,暴力模拟显然是不能过的,因为方案数还要模,那肯定是很多的吧,那么考虑dp,f[i][j]表示到了第i个点,还可以绕远j的距离的方案数,因为n<=100000,k<=50,O(n*k)显然没问题,那么好了,正着、倒着一遍最短路是不能避免的。然而看到题,还有无数解的情况,怎么样会无数解呢?那就是你发现走到一个地方,发现有0环,那么就可以在0环上无线绕,方案就有无限种了,但是发现,出现0环并不一定是影响答案的,只有在路径长度<=最短路长度+k的路径上的0环上的点才会影响答案。一开始我想错了,打了半个小时。后来把dp、spfa都打好了,就差一个判无限方案情况。事后得知判0环其实也可以找出所有有用边、点,把0边拖出来拓扑判环就好了,但是我考场上没有想清楚,直接拓扑,所以从0环上指出来的0边指向的点会被我判在0环上,所以我的公式:起点到他的最短路+终点到他的最短路<=起点到终点的最短路+K不能完全得到应用。在民间数据中我的T3没有被卡,但是不知道官方数据会不会卡。

https://cdn.china-scratch.com/timg/180313/1541511053-2.jpg

day1的考试我剩下了一个小时,最后在那里手构数据,检查代码、freopen,进行对拍,却没想到T3会有正确性问题,希望官方数据出来后day1能考的好一点。

NOIP2017复赛day2

考完了day1休息了半天,和大家一起揣摩T2可能考什么题目,T1不是很难,T2可能就要出难题了,终于,day2开始了~

· day2 T1 奶酪(cheese) 
https://www.luogu.org/problemnew/show/P3958 
    day2T1,看到距离公式,吓的以为是计算几何,但是仔细一看其实是一个并查集的题目,最后看到下表面和上表面是否并查集的值相同就好了。

https://cdn.china-scratch.com/timg/180313/1541515621-3.jpg

· day2 T2 宝藏(treasure) 
https://www.luogu.org/problemnew/show/P3959 
    T2,n那么小,就觉得是状压dp,但是状态怎么表示呢?我想了一个方法,并且打完了,小样例过了,大样例却没过,仔细一想,正确性好像有问题,我f[i][j][k]表示现在的取到的点的状态是i,枚举到第j个点,j这个点的深度是k,但是转移感觉不会写,然后就挂了。最后我交上去了一个所有V相同的部分分,枚举每一个起点BFS贪心的取,不知能拿多少分。事后得知这一题爆搜加剪枝就能拿很多分,而BFS的状压可以过掉此题。

https://cdn.china-scratch.com/timg/180313/154152C55-4.jpg

· day2 T3 列队(phalanx) 
https://www.luogu.org/problemnew/show/P3960 
    T3感觉是数据结构题,但实在不知道怎么做,分块?应该能拿到1e5时的分,暴力,优化一下内存能拿50分,加起来就有80分了,然而我打的时候内存优化(set维护哪些被用过)出了点问题,然后最后只有30分了。问一个dalao怎么数据结构,他说用treap维护,spilit一下就好,只是可能还是会T,线段树加二分就好。

https://cdn.china-scratch.com/timg/180313/1541526149-5.jpg

纵观day2,不是很顺,T2T3都和正解擦肩而过,部分分也没打好,还是要提升代码能力,要是T3部分分打出来了,正解该是也很好打的吧。

总结

NOIP2017结束了,day2实在是考的不尽如人意,没有打好暴力,就落得如此下场,day2T2死磕太久,导致时间不够,day1T3正确性没得到保证,说明思路的严密性还不够,所以以后要培养判断一个算法正确性的能力吧。

--end--

声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com