NOI 2019 网络同步赛 游记

Isaac给我力量

Posted by wyj on July 19, 2019

最近Ubuntu来了一次该死的更新,可惜我不会回滚,所以现在我只能忍受一个全屏乱码的洛谷博客了。

Day1

我太菜了,所以连D都没有。能够用机房里面的18.04还是挺爽的,体验和自己电脑差不多。

开考前我先下载了一堆模板。可惜我不知道如何快速从Github上下载文件夹。于是我只挑了一部分下。(可惜判断失误,没有下KD-tree).

考试时发现有网。一开题,发现居然没有C++11,难受至极。于是我想起来了去年很后悔没有试验#pragma开C++11,我当时还以为再也没有机会试验了。然而谁能预料到我连D都买不了?于是进行了试验。

然而发现我本机的C++11和pragma开出来的差别太大了,只好在LOJ上面用C++(NOI)测试。CE了无数次。

T1,一看就是sb最短路题,可是复杂度有1e8。所以我不太敢写,开始看T2。一眼看出来35分简单dp,然后就想滚数组过50。然而发现这个dp状态几乎不可能滚数组,于是放弃了。接下来是T3,一开始没有任何思路,想了很久\(O(2^nn)\)的算法是如何通过\(\sum n\le3e5\)的,然后ys告诉我数据最多只有10组。然而我马上想到了一个费用流,于是开始码。

我前面下载模板的行为是一个错误,我不应该下载dij费用流的板子,因为这个图里面spfa比dij快。费用流过2000的梦想破灭了。

然后码T2,dp很快就码完了。开始考虑下面的一档部分分,想了一下\(n=4\)和\(n=5\)的情况,答案都推出来是多项式。使用了isympyinterpolate函数,居然真的是多项式。(这个isympy不是什么好东西,Day1给了我10分,Day2扣了我30分)。然后就拉格朗日,对拍过了。

最后是T1。我发现图是DAG,不需要跑dij,最短路是线性的,我就更加自信1e8可以A题。当时我脑子还比较清醒,知道这个东西肯定不能建图,建图就T了。于是就隐式图上一边拓扑排序一边递推,就自以为过题了,大样例跑的贼快。

还剩下一个小时,我开始推T3的模拟费用流。我脑子里成型了一个贪心,写了个\(O(n^2)\)的朴素实现,直接加个堆就可以\(O(n\log{n})\)。然而我贪心太菜了,少考虑了一种情况,导致我10个大样例只过了3个。

期望得分\(100+45+40+x=185+x\),其中\(x\)是T3的人品分.

然后是套路剧情,snz开始嘲讽,他自称fst了,只有214。他插值写错了。

到了第二天凌晨,我从知乎上了解到可以在loj上评测,于是开始评测。实际得分\(70+45+40=155\)。T1数组忘了×2,丢了30分变成暴力。由于我写的dij费用流,T3就算数组记得开大了也只有44.

Day1.5

愉快的颓废。然而isaac让我自闭了。颓了一整天还是没能打过第一层boss。从此我一直以撒一直爽。

Day2

没有外网。所以不能场外编译了,我提心吊胆。srf在考试开始之前得到了题目链接,我依葫芦画瓢,在考试开始之前得到了数据链接。(千万别禁赛我)

一开题,怎么T1又是最短路,现在NOI变成最短路专场了吗。本来觉得kd-tree稳过,然而我脑子没有Day1清醒,还打算把图建出来。所以白白亏了12分。建图时使用了C语言专属的bitfield奇技淫巧卡空间,自以为可以过88。写了两个小时。

然后是T2,这个题面是什么垃圾东西,洗牌操作的意义显然是两个排列的\(C(n+m,m)\)种混合方式等概率出现。于是就有30分的朴素dp。然后当时脑子短路了(同时被998244353迷惑了),以为\(A\)全相同的部分分是倍增ntt之类的。开始下面一档部分分(\(type=1\)),根据所有混合方式都是等概率出现的这个条件,以及期望的线性性,我先看出来了一个\(O(mn)\)的递推。然后考虑\(m=1\)的情况,发现混合之后,按照我的递推式,肯定还是一个线性函数。直接归纳可得全是线性的。于是30分到手。

下面被isympy坑了,我本来已经看出来此题的结论(直接插值),于是用python插值,我不知道拉格朗日插值有如此之大的精度误差(用的double),超过了1e-3级别。于是我以为插值是假的。丢了30分。

T3交互,我不太擅长。我犯过\(500\times500=25000\)的错误,现在又犯了,以为\(n^2\)次query很稳。所以丢了4分。然后想了一个分治套分治过了下面的16分。

又是剩下了大概1h的时间,我先想了T3的树和链,都不会。最后十分钟我忽然发现T2的那个10分可以矩乘,板子库里面没有,我就7分钟码了一个矩乘。怎么输出全是0?原来我构造矩阵时多复制了一行memset0。过了对拍。激动万分。

期望得分\(88+70+36=194\)。

今天似乎没按套路出牌,倒是像apio一样,snz开始了装弱。因为保送早就很稳了,所以他开始浪,184。于是我破天荒的踩了一次snz。

当然我fst了,T1被卡了一个点,需要133MB。T3错误估计了询问次数,WA了一个点。

最终期望得分\(194+189=383\)勉强够金牌线。实际得分\(155+186=341\)大概八十几名。