【比赛游记】FJOI2020 打六题挂四题记

上接 FJOI2019 瞎打记NOI2019 打铁记


day 0

早上睡到很迟,下午看考场,很劲爆,不用 FrC 提交了。打了一个 NTT(FJOI 怎么可能考)和一个 SA 然后走了。

晚上打模板,复习资料什么的。

我写下这句话的时间是 00:48。

++FJOI2020.rp

当 NOI2019 落幕时,在广州二中的颁奖典礼门外,我拭净眼角的泪水后

哐当一声,有一个声音告诉我:「你再也不能笑着说『还有下一次』了」。


day 1

早上进校门的时候,测的体温是 37°,很可怕。

进考场,看题,T1 费用流原题,在哪本书里好像有印象。写完后大概是过了四十分钟这样。

T2 看了一会儿发现要个圆方树,很吓人。赶快回忆了一波 Tarjan 怎么写,然后建出来圆方树。

然后就不会了,他要求的是点,但是如果考虑边呢?好像可以启发式合并,那就很好,可以 \(\mathcal O (n \log n)\),但是怎么把边转化成点呢。

推了一下发现很弱智,就是周围边加上自己再除以 \(2\)。大概九点四十写完了,调了调好像把样例过了,手造几组好像没错。

然后后面就在大力搞 T3,看到题立刻手玩 \(n = 4\) 时到底是哪两个比较憨批没法得到,发现是 \([3, 1, 4, 2]\)\([3, 2, 4, 1]\)

然后 \(n = 5\) 的玩不动了,赶快写个枚举全排列 check 的程序,check 就用贪心就行。

跑出来一堆,发现都有这个 \([3, 1, 4, 2]\) 或者 \([3, 2, 4, 1]\) 作为子序列(离散化后)。

那么猜想只要有这两个子序列就不行,赶快又写了一个程序直接 \(\mathcal O (n^4)\) check 是否存在这个子序列。

发现输出结果完全一致,那么猜想就得到验证了。

接下来就是计数不存在 \([3, 1, 4, 2]\) 或者 \([3, 2, 4, 1]\) 作为子序列(离散化后)的排列个数。

一开始想了一个假的 DP,想了好久大概半小时才发现是假的。后面换了个思路,发现就会做了。

就发现好像可以变成一个 \(\mathcal O (n^2)\) 的 DP 了。手动模拟了一发好像非常正确,就写了。

这个时候就有 \(50\) 了,然后回过头来看前两题。

检查了一下前两题的代码,然后 T1 不好写对拍,那么就写 T2 的对拍。

暴力就用 \(\mathcal O (n (n + m))\) 的,然后对拍写了一会儿开拍,拍了挺久都没错。

再回来想 T3,发现之前的代码甚至没有提交,赶快交了一波。

首先把那个 DP 式子试着用生成函数推了一下,推了一半发现假掉了。

然后换个思路转成一个 DAG 带权路径计数问题,但是并没有什么卵用,我要求的是一行的所有终点的答案之和。

对于某个固定的终点,我似乎可以搞出起点到它的路径条数,要枚举向 DAG 的右下方节点走了几次,然后有个卡特兰数。

虽然现在看来那个式子好像是错的,反正我就是对着它硬推,结果惨不忍睹,完全不知道是什么东西,反正也没法卷积。

然后在最后 20 min 的时候,恍然大悟这一行的所有和就是下一行的第一个数啊,瞅了瞅那张表好像确实如此,那么我就赢了啊!

仔细检查了一下式子发现有几点错误的地方,改了一下就开始码了。

要求组合数,卡特兰数什么的,因为不知道模数是多少,卡特兰数就用组合数相减来求,为了保险又写了个 Lucas 定理。

最后在结束前 4 min 惊险写完,跑了跑小数据发现没问题。就赶快提交上去了。

出考场的时候觉得我 AK 了,FJOI 居然轮到我 AK 了吗?

中午划水,顺便跟同学扯扯 T3 做法。

下午评测结果出来了,我 \(0 + 100 + 30 = 130\),顿时感觉有点离谱,但是也没那么惊讶,大概早有心理准备了吧。

于是乎申诉,于是乎嗓门就开始大了起来。毕竟如果真的是这种结果的话,要说接受我也是不会这么轻易就接受了吧。

然后过一会儿代码公示下来了,我看不出 T1 到底咋挂了。让同学说了几组数据,都没错。

同学帮忙写了个对拍,居然拍出错了,但是范围太大,但是范围一缩小,又全都是对的。

最后发现 \(H \ne W\) 的时候我就挂了,定睛一看一个 W 打成 H 了,直接结果就是 \(100\) 分没了。

好吧,这个操作,我服了。

然后申诉结果出来了,告诉我 T1 全 WA,T3 WA 了 5 个点,TLE 了两个点。
(啊对,这个就是申诉,就是告诉你评测结果,甚至是打乱的,对应不上具体测试点编号)

我猜想是 T3 前 \(50\) 分我对了 \(30\) 分,然后 \(20\) 分被卡常了,后 \(50\) 分则是他数据错了(迫真)。

于是我在机房里大吼大叫,然后在 vuq 里喷(

计算了一下,其实上了 \(200\) 分的也就三个人,而且最高分 \(210\)

综合 CSP 成绩,省内排名是 rk8 这样,比去年的 rk16 已经好了太多了。

但是这并不意味着 day 2 能掉以轻心,毕竟去年是 day 2 T3 不知为何我校就是都很会做然后 AK 了。

nealchen 他 CSP 比我高了 \(41\) 分,这场 day 1 却比我低了 \(20\) 分,这么一来一回,他就比我高个小数点后两位级别的分数吧。

如果 day 2 要翻盘的话,那就要比 A 队那几位高个 \(45\) 分这样,说实话还真是不小的挑战啊。
相对地,如果比省队尾端低 \(33\) 分……

最后还是无事可做,在同学的安慰下回家了。然后在回家的公交车上,ustze 告诉我先输入 \(n = 6\) 再输入 \(n = 5\),我就没了。

我定睛一看,才发现多测没清空干净,爆零两行泪。

这时真相才终于大白,我想我 T3 的评测结果,很有可能是 WWWWWAAATT 吧。

是正解被卡常,DP 没完全清空(少清空一位),如果直接用正解,那还能多捞 \(50\) 分,但是我没有这么做。

jiangly 说他就不会把暴力留着,但是我一直以来都是留着暴力的。

所以说又是只要改五个字符,把 H 改成 W,再给 N 后面添上 + 1,我就 \(280\) 分了吧。

不过事后诸葛亮,也没什么意义了吧。不如把它当作历史的必然,接受这一切,然后再祝自己 day 2 的 RP 能高点吧。

话说,EntropyIncreaser 在 vuq 里说 T3 比「NOI2018 冒泡排序」还要高明,听了还是很惊讶的。


day 2

RP 还是低了。

开场先看了看题,T1 看起来是很变态的数据范围还巨大的 DP 优化,一眼就知道要 wqs 二分和决策单调性。

T2 是计数题,毒瘤。T3 是数据结构题,和之前在学军中学做到的那题差不多。

那么先考虑把计数题搞出来,是求把凸 \(n (k - 2) + 2\) 边形分成 \(n\)\(k\) 边形的方案数。

\(k = 3\) 的时候就是卡特兰数,那如果 \(k > 3\) 呢?哎我草,咋还有 \(k = 2\) 的情况??

所以 \(k = 2\) 先不管,我猜出题人会更正。那么我们考虑卡特兰数就是 \(m\)\(+1\)\(-1\) 组成前缀和 \(\ge 0\) 的序列。

这时我回忆起《具体数学》上的,一个使用这个折线构造求出卡特兰数的通项公式的方法。

同时还回忆起在学军中学的时候有人讲过广义卡特兰数什么的,那么我不妨也朝这个方向想一想。

如果是有 \(n\)\(+(k - 2)\)\(n (k - 2)\)\(-1\) 组成的序列,要怎么求出来呢?

这个时候一位工作人员走进来,说 \(k = 2\) 是退化的情况,没有问题,我当场就懵逼了。

说回这道题,《具体数学》上给出的方法是在尾端再加上一个 \(-1\),也就是总共 \(n (k - 2) + 1\)\(-1\)

这样它们的总和就是 \(-1\),如果写成无限循环的序列,也就是每经过 \(n k - n + 1\) 个数就下降 \(1\)

也就是斜率是 \(1 / (n k - n + 1)\),又因为经过的点都是整点,所以折线的下包络面也应该是每 \(n k - n + 1\) 经过一个元素的。

以那个元素为终点,前面的序列就恰好满足条件,也就是说 \(\displaystyle \binom{n k - n + 1}{n}\) 种排列方式中,每种有 \(n k - n + 1\) 个循环同构的。

所以答案应该是 \(\displaystyle \frac{1}{n k - n + 1} \binom{n k - n + 1}{n}\),对着 \(k = 4\) 验证了一下,发现完全正确。

那么就很舒服,只要 \(\mathcal O (n)\) 算出这个组合数即可。当时觉得这东西应该就是学军中学讲的 \(k\)-Catalan 数吧。

写到一半出题人又进来,说 \(k = 2\) 虽然是退化的情况,但是为了你们选手好理解,特别改成 \(k \ge 3\) 了。我觉得行。

大概 8:40 写完了 T2。

然后这个 T3 我过了六个月,依稀记得点做法。

考虑如何求 mex,扫描线,用权值线段树维护每个数的下一个出现位置,在权值线段树上二分定位到第一个出现位置大于某个值的数。

然后总的 mex 区间改变次数是 \(\mathcal O (n)\) 的,这就可以对每个值维护一个动态开点线段树来回答询问了。

大力码码码,码到了 10:20 用了一个小时四十分钟才差不多码出来调完了,这波样例才终于是过了。

然后对于 T1 感觉就是 wqs 二分套决策单调性优化 DP,不过不太想写。所以给 T3 写写对拍应该是比较好的选择。

然后就写了个暴力,这题的暴力很好写。开拍也拍上了,居然没出错,就很离谱。

过了一会儿,去上了个厕所回来,还是决定写一写这个 T1。

思路非常清晰,但是转移代价的处理出了点错,还是调了一会儿,然后写了几个暴力 DP,能过样例,顺便验证一下凸性和决策单调。

然而单调栈处理决策单调性的时候,细节还是有点麻烦,又调了一会儿,大概在 11:43 的时候写完了。

然后考虑对拍,因为已经写过暴力 DP 的程序了,所以还挺顺手的,然后 \(n \le 100\) 的时候拍了四十几组,WA 掉了。

看得我傻了,换成 \(n \le 25\) 拍了几十组还是挂了,赶快搞了点输出,但是一时半会儿找不着哪里有问题,最终还是没改,直接交了。

出来的时候觉得自己应该第一题比较凉,但是第二第三题都是稳稳的,毕竟昨天是多测没清空,今天不需要清空,T3 也拍过了。

中午划水,了解到 hotwords 和一位学弟都猜出来 T2 结论了,很会猜,但是 nealchen 却没猜到,他数学这么强都没猜到。

下午评测结果出来了,我 \(0 + 100 + 20 = 120\)。又挂了 \(80\) 分,比较愣。最后发现是询问的权值忘记离散化了,低级错误。

但是综合一下我还是进队了,因为别人考得也不算高,T2 的结论不是所有人都得到了,而另两题又比较毒瘤,所以总体得分不高。

但是只有 rk6,也没能蹭进 A 队,rk1 是 xyz32768,rk2 是 Lagoon,rk3 是同学 LH,rk4 是厦门的 slz 同学。

说来还是很可惜,最差的就是 day 1 T1,就因为一个字母把全场都有的 \(100\) 分给扔掉了,加上这 \(100\) 我也就队长了。

两天都不同程度地挂了好多好多分,居然还在队里,也是很神奇,看来别人也有挂一些分吧。

也说明了我 OI 赛制的比赛还是训练得太少,挂掉的分都快有得到的分多了,要是今天 T3 数据强一点,就真的比得到的分多了。

明明是至少会做 \(5\) 题的正解的,虽然 day 1 T3 他卡我常数,但是不挂分应该是至少 \(480\) 分,但是挂得只剩 \(250\) 分,也是很惨。

既然已经进队了,虽然没 A 类有点可惜,但至少用不着抱怨了吧。


每年的省选季总是最伤感的时候。

靠着这评价可能褒贬不一的,省内的追逐战,有多少人以最不甘心的姿态离开了呢?

我想每个有梦想的 OIer 都曾幻想过在省队后的,种类繁多的比赛上大展身手,在 NOI 的赛场上证明自己的实力吧。

如果此时是高一,可能还有去体验的意义,但是如果是高二的话,即使有机会参加,那一切的流光溢彩的梦也失去了意义。

朋友们,就此别过吧,但愿多年后我们还能相视一笑。

在无限的落寞的阴影下,我仍然真心相信着,这一切都是最好的安排。


下转 NOI2020游记

posted @ 2020-06-25 00:55  粉兔  阅读(5298)  评论(11编辑  收藏  举报