NOIP2017总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34283998/article/details/78522015

Day 1


T1

第一眼看就想到是拓展欧几里得,通过解出X0,Y0推出c(能取到的值)关于t(拓展欧几里得解系常数变量)的不等式。把t的每一个取值中,c的范围看作区间。然后再列不等式将,一个最大的t,使得相邻两个区间中间有数,答案即为这个数。
但是前40分钟都在推这个东西,再取整和正负的情况上讨论了很久,有些焦急,于是跳到了第二题。将第二题写完后才来写第一题,最后写了一个20以内的暴力对拍。然而下来后才知道数据越大,我和答案相差的越多。

T2

读完题便知道怎么写,完全没有思维难度。是一道代码实现的题,很快就码完了,而且顺利地过了大样例,就没有去管这道题了,跑去继续做第一题。结果可能码的太快,Yes,No码成全大写。实际上就算码对了,也只有30分。原因是并行的循环我只是考虑了第一层,事实上是有很多层的。

T3

这道题并没有什么完整的思路,所以一来就去想的骗分。对于有0边的情况,用Tarjan处理,进行判断是否有无穷多的解。然后SPFA处理最短路,但这样只能有30分。据说离正解只差一次dp,却怎么也没有往dp的方向想。莫名只有10分

Day 2


T1

读完题看一眼数据范围就直接码过了dfs。

T2

首先想到的是最小生成树,枚举一个根(即起点),然后跑一遍SPFA处理出最短路(首先要去重边)。然后重新处理边权,用kruskal跑出最小生成树。但是在过大样例时,发现了一个问题。由于边数太多了,所以每两个点之间有很大的几率有一条边(去重边后),因此我的最短路处理出的距离在这种情况下就是2。然而在树上,他们到根的距离并不是为2的,所以得到的新边权是最理想的情况,然而边一多就达不到这种情况。
接着我很庆幸地发现自己还有两个半小时,于是开始想其他方法。但是也完全没有往正解状压dp上去靠,然后开始想骗分。此时还剩一个小时四十分钟左右。码了个暴力,然后开始调,调完发现只有20。然后此刻发现原先的kruskal可以过40分,于是果断搬回原来代码(还好有保存)。此时还剩1小时。
也就是说我在第二题上浪费了1.5h却还只是在原地踏步。

T3

因为只剩一个小时了,所以先码了一个暴力,先拿住30分。然后开始尽量骗,发现x=1的情况可以用树状数组维护在此之前有多少个人离队,然后加上当前离队这个人的位置,然后考察加上后又有多少个人离队。如此循环。可以得到当前离队的人在原方阵的位置。如果超出了原方阵的大小,那就是之前离队的人。因此还要用vector记录离队的人,也可以查出离队人的编号。期望得分80
然而,写完了之后就只剩10分钟,不敢调,过了自己的小数据就去检查代码了。结果果然没有对。只有暴力的30

反思

  1. Day 2时间分配有问题,第二题浪费太久并且没有得更多的分。
  2. dp各种薄弱,怎么都没有往那边去想
  3. 想到的方法,没怎么仔细评估得分和实现就开始码,心太急。

猜你喜欢

转载自blog.csdn.net/qq_34283998/article/details/78522015