NOIP2017游记

day0

今年跑到了郊区考场…晚饭吃得比较早,所以到那里时又叫了夜宵。
晚上也没怎么腐,和平时差不多的时间就睡了。

day1

坐进了考场后,今年连试机的时间也没有。。坐在那干等了15min开场。

待到8点半比赛开始,解压了文件后,发现今年只有example_data和题目。
没有注意事项、没有要求写什么自我介绍txt

不过没有太在意。首先看完所有题。第一题竟然不会,第二题感觉就是个模拟,第三题大概是拓扑序dp。

然后首先做第一题。首先猜答案不超过a*b,然后写了个暴力,然后开始研究正解。大概在签到表传到我这的时候就发现了结论并写完与对拍。
然后?我发现极限要开long long。那就开long long 咯。这时我写的是%lld。
然后我出于“特别谨慎”,这么短的代码写测了下极限。发现它溢出了。
改%I64d过了。
接着我在想:最终评测是怎么输出。我们的oj其实就是linux评测的,平时习惯了用%lld。但是我考场上没有想起来有这回事
这时我犹豫了一下,然后打算问评委。得到的是:不予解答。
不对劲啊~我印象里每年注意事项上都有写64位整数如何输出的…不过我没有再问下去。
更奇怪的是:我竟然没有想到改用cout,putchar,高精度中的任意一个来输出。
于是我坚持用了%I64d。。

然后写第二题。我模拟的时候直接用个栈并把嵌套关系写成一棵树,然后测大数据+手出数据过掉了。这种题没法拍啊,总感觉会fst。。

最后剩挺多时间做t3。
首先考虑如何判无解。我最初写的是起点、终点开始都跑个最短路(我手写堆+dij),然后枚举一个可以满足d+K的点作为起点找个负环。然后是拓扑序dp。拍了几分钟后突然报错,后来改对了。接着又拍了好久。
剩下1h时测极限。发现三组数据都有解的时候,边权取值范围越小跑得越慢。我把自己卡到了5s。之后发现最短路和判无解是很快的,大概是在拓扑序dp里的寻址和取模导致常数变大。
但是最后也没有卡常成功~

出了考场,张俊问我:你第一题怎么输出的?
我说:I64d啊~
“可是我考前在官网看了注意事项,是lld啊”
“……”
心情复杂地回到酒店,上网查了一下,发现对此的说法有很多:有的人说在linux下过不了编译,有人说没有输出,有人说和%d的效果一样。
反正我做好迎接爆零的准备了…

然后就不管那么多了。

下午。感觉万达有点远就不去了。我们叫了下午茶,然后在酒店腐到饭点。 吃完回来继续腐…

晚上又是差不多平时时间就睡了(应该晚一点)

day2

当我一靠近这个考场,我又一瞬间火气冒上来了。甚至进场时还瞪了评委一眼…

今天看完题目,后两题一眼不会。。然而第一题考场几分钟就开码了。
加上debug花了差不多半小时(有个变量写错调了挺久…)然后发现有个地方很危险(可能爆long long)。我首先在想:|zx-zy|方的范围会不会达到 263 ,发现中心可能不在立方体内,于是我移了个项到右边就好了。

然后开始做t2。这n小于等于12让我一眼搜索啊(这可能受到某场模拟一道搜索题的影响)。然后我就全程想搜索。首先考虑对于一棵确定的有根树如何确定答案,这显然可以bfs。然后我就在dfs的时候顺便执行bfs,即dfs(x,y)表示处理到队列中第x个元素的第y条出边。然后我把没用的边删去,把出边升序排序,这样还只能跑70分。那怎么办?我加了个估价函数。
然后?然后我n=12一闪而过,对着我的估价函数卡也是一闪而过。甚至我的程序n=14也能一秒内跑出来。然后我开始对拍并思考t3.

我先挖掘题目的性质,发现可以把最后一列单独拿出来,就变成了从某一行最后加一个元素,和从某一行中间取出一个数两种操作。
然后我写了个动态开点的线段树维护每一行被取出的元素位置,后加入的就用一个队列来存。取出元素的时候在线段树上二分查找。测试极限跑1s~

最后就一直在拍后两题,肉眼检查第一题。

总结

估分day1 0+100+70 day2 100+100+100
实际得分:(0+100+70+100+100+100)

最主要翻车的地方是day1t1。比起不记得linux下的输出方式,更大的问题是没有想到去同时避免两种输出方式。
这个问题可以延伸到其它方面,比如在用数据结构维护某个东西,如果某一种数据结构的几个写法都跑不过去,是否要换一个做法。所以考场上的应变以及思维的转换是要注意的问题。

还有一个问题就是卡常失败~没有意识到去优化取模。

有一个比较好的是在day1失败的情况下,day2没受影响,还能稳定发挥。

(以后可能要找时间装个NOI linux了,虽然5月在北京三场比赛linux用得挺顺,但是还要防止以后出现别的问题)

以后的比赛不少,还要稳定发挥

你可能感兴趣的:(比赛总结,杂文)