noip2018——题解&总结

好了,所有的希望都破灭了,原来这就是出题人的素质。——一个被欺骗的可怜 $OIer$


游记

Day 0

啥都没复习,慌得一批。

打了个自闭模拟赛,第一题输入写错了,第二题推不出来,准备退役,yeah。

下午跟大佬们去听听 CXM 的考前叮嘱,又给我们讲了一遍 $NOILinux$ 的相关操作,尤其是终端编译(我考试用了吗?……)我顺便记了一波。

然后去借(抢)$LHC$ 的电脑,用他装的虚拟机练了一波终端。

虚拟机真卡,喷。

用了两遍命令行发现没啥问题,就放心了。

晚上早早回到家,瞎**复习了一波简单题,又看了看数据结构模板。诶,越看越虚,我要是连相对简单的 $Day1$ 都不会做我我就有望退役了。

吃完饭先装 $NOILinux$。

装了好长时间(二十分钟?),发现虚拟机进不去导入的 $ubuntu$。

上网查错误信息无果。

我换家里的台式电脑,又装了半天,发现还是进不去?

为啥啊?……

我上 $NOI$ 官网下载 $iso$ 试试。

结果官网下载特别慢,显示要用 $40$ 多分钟。

不对啊,我之前从邮箱传回来的 $iso$ 文件只要 $10$ 多分钟啊?

我就大胆猜想是邮箱传坏了。

于是等官网的 $iso$ 下完了,我再导入虚拟机,诶,能用。

然后我就用低端的虚拟机写了道联合权值,练了下对拍等操作,就睡觉去了。


Day 1

早早地起来去北师大附,路上还挺虚的,用手机复习了一遍逛公园那道题用拓扑排序方法怎么做来着。

到了考场大门,发现我的几个同学也都刚好到。然后我就 $\%\%\%$ 他们咯。

俗话说“膜高一尺,分高一丈”嘛!向大佬膜拜,分能越膜越高。

进了考场,找到我的位置就坐下啦。

噗……这显示屏的屏幕分辨率不对啊……显示的东西都是扁扁的,配置真垃圾。

公布了电脑密码之后我就找设置,想改屏幕分辨率,然后发现这是最高的了,而且只能调三种分辨率……另外两种更可怕……

电脑配置差真的很无语。

$SYF$ 大佬坐在靠窗户的位置,我望了一下她,继续 $\%$ 了起来。

 

考前几分钟公布了试题密码,只让看题,不让写。

打开压缩文件,我把东西全拖出到主文件夹。

先看了下规则文档,今年开始改规则了,每道题的程序要放在不同的文件夹下,以前就给个考号文件夹,三道题的程序啥的一起放进去就可以了

然后去看题。三道 $1s/512MB$ 的题,突然感觉很虚。

先看 $T1$,好像不太难,扫了一分钟就看 $T2$ 了。

看完 $T2$ 又虚了,好像没什么思路,跟去年的 $D1T1$ 小凯的疑惑 差不多的感觉……

三分钟之后去看 $T3$,来回看样例和数据,只能上来就想到二分答案,然后还不会判断。

凉,看完今天三道题感觉好虚啊,我怎么什么都不会。

 

到点可以写代码了,我先敲了缺省源,存到每道题的目录下。

然后做 $T1$。

然后我发现 $T1$ 暴力好像是 $O(n^2)$ 级别的??

也就是说我连 $T1$ 不会做了?

凉,当时想退役了。

周围已经响起啪啪的键盘声了,然后我就慌了,赶紧拿笔推样例。

然后就猜想,是不是可以做个倍增,快速求区间最小值,然后在分治的时候把区间所有数都减掉它。再以这个被减成 $0$ 的最小值为分界,继续分治,减两边的区间?

但是如果一个区间中有多个相同的最小值怎么办?也就是说对一个区间同时减去最小值,区间可能被 $0$ 分割成多段而不是两端。(后来发现这个其实没影响)

然后我觉得这个做法就凉凉了。(但好像数据太水,依然能 $A$)

然后发现可以反过来做:把相邻且相同的数的区间记为同一个区间,然后每次找数最大的区间,把它减成与它相邻的区间中,数最大的那个。

这样倒是可以,把分治转成合并,就不用考虑多个数同时被减成 $0$ 那种问题了。

然后码了一波,发现自己写区间合并的代码能力真差……

合并的时候,只要改被减区间的两端点的归属就可以了。

无脑码了挺久,大概写到 $9:20$ 吧。小样例很快测过了。

然后我没立刻测大样例,转 $T3$ 了。

 

再次看到 $T3$,回想了一下老师讲过的那些 树上 $dp$ 的特征,然后注意到这题跟 树上 $dp$ 的性质很像,对于一个点,赛道要么经过这个点和它的两条儿子链,要么经过这个点、它的一条儿子链和它的祖先链(并且只能向上传一条)。

那就是贪心了吧?把一个点的所有儿子传来的链长排序,对于每一条儿子链,把它删掉(防止另一条链取到它自己),贪心取另一条与它相接的长度大于 二分的答案$mid$ 的一条儿子链,再把那条链删掉,记赛道数 $+1$;如果没有能与它连成合法赛道的另一条儿子链,就把它传给祖先链。祖先链只能选一条最长的儿子链传上去。

当然特判一下所有长度 $\ge mid$ 的儿子链,把它们自组成赛道就行了。

这不是 $dp$ 啊?贪心??

但是又推了一下,好像这么做就可以了,确实不用 $dp$。

于是我就尝试了一波,$10$ 几分钟后写完了。当然我比较懒,直接用了一种支持加数、二分查找(lower_bound)和删数的 $STL$:$set$(其实不是这个,后面会提到)。

试了一下前两个小样例,都过了。此时 $10:10$ 左右,转战 $T2$。

 

一看到 $T2$ 又懵了一下,发现还是不会做。好像很结论啊

于是我手写了一组小数据($2\space 5\space 7$),发现可以不要 $7$,因为它能被 $2,5$ 表示出来。

这样答案 $m$ 就是 $2$ 了。答案肯定不会是 $1$,因为这个集合能表示的数的集合是 $2,4,5,6,7,8,9,……$。

那还有 $m=2$ 的方案吗?经过尝试发现没有。

好像不能用 不在原集合的数 表示出等价的货币系统啊?

感觉这个结论很显然,简单想想大概是因为一个数能表示的集合只与自己等价,再深入证明我当时也不清楚了。

进一步推,也就是说只需要看一下原集合中一个数是否能被原集合中其它一些数表示出来

然后看了一下数据范围,$T\times n\times a_i=5000w$,且 $a_i$ 是正整数。那就 排序+背包转移?

**,感觉 $T2$ 比 $T1$ 还简单了。

**,感觉刚开考时自己就是个傻逼。

$5$ 分钟抓紧码完代码。

$10:30$ 的时候三道题就都写完了。

 

然而三道题都还没测大样例,我就着手先测 $T2$ 大样例了。

一测,没过!什么情况啊?

很快发现背包转移写错了,能把转移的 $true$ 重新刷成 $false$。

迅速改了一下就对了。

然后去测 $T1$。

一测就死循环了,我瞬间懵了。

看了下优先队列的判退出是怎么写的。

然后发现我又 sb 了:$if(l[u]==1\space \&\&\space r[u]==6)\space break;$

$r[u]$ 应该判等于 $n$,我测第一组样例的时候直接把样例的 $n=6$ 写上去了。

然而改完了还是死循环。

为什么??合并区间有问题吗?按理说合并区间最多只要 $n-1$ 次啊,最后就只剩下一个区间 $[1,n]$,然后退出去。

我加了个调试特判,让优先队列跑 $10w$ 次就中途退出输出累积得答案。

然后惊奇的发现答案对了?!

那为什么会死循环?

这个问题坑了我好久。大战了好久,才发现原来我没判区间位于左右边界的情况。于是区间向下标为 $0$ 的位置及左边界之外合并,最终合并出的左端点就小于 $1$,然后出不去了。

其实好像预处理也写的不太对,但这里不好描述是怎么改的。

大概 $11:15$ 的时候终于过了 $T1$ 的大样例。由于代码的调试输出太多,弄得伤痕累累,我特意重新码了一下格式。

最后测 $T3$ 的大样例。

不出所料,又没过。

但是我盯了半天代码没看出哪里有问题,好像写的都没错啊?

于是我赶紧yy起了 $hack$ 数据。

然后第二组数据就 $hack$ 掉了:

4 1

1 2 1

2 3 2

2 4 2

答案明显是 $4$,然后我的程序输出 $3$。

我就疑惑了,下面两条边怎么没有合并?

我输出了一下在 $2$ 号点合并儿子链时,记录链长的 $set$ 的大小。

然后发现只有 $1$。

不是插入了两个 $2$ 吗?

想了半天,我突然意识到了:$set$ 是不可重集,相同的数只存一个。(这就是之前为什么说其实不是 $set$)

我赶紧改成 $multiset$,再测大样例,还行,跟自己想的一样过了。

再过几分钟就 $11:30$ 了吧。

也就是说我可以装作今天 $AK$ 了?

不过我没有立刻放松,反复地查文件名、输入输出、编译是否还能过等各种细节,防止又翻车了。(我去年 $D1T2$ 打错大小写打错然后爆零了)

多亏最后 $10$ 分钟发现并删除了 $T3$ 一堆调试用的 $getchar$, 不然我直接交上去就可能 $T$ 了。(不知道为什么本机测就没事)

呼,累+虚+紧张。等着收卷吧。


考后发现 $D1T1$ 居然是 $noip2013\space D2T1$ 原题??人名都不改??

而且我还没复习那道题??

$noip$ 出原题真的没事吗,不违反规定吗,

等等……中国信竞规定都是他们出的,他们就算真做的有出入,谁敢管啊

总之 $I'm\space so\space moved$。

回到家之后我就惊奇地发现:只是这样吗?

Day1三道原题(或近似)

看看知乎

T2

T3

$Day1$ 就出成这样?几乎是三道原题,sdyg去吧。

三年OI一场空,三道原题见祖宗。NOIP=POI*N。

更可笑的是,有人在考前几天发现某些网站上(如bzoj)的原题被关闭了,然后就猜出了是NOIP原题。

行了,准备禁他们的赛。

出题组疑似在 $2013$ 年泄露 $noip2018$ 的试题,严重违反公平竞赛原则,也禁赛三年。

对了,验题组也禁赛三年。

猜你喜欢

转载自www.cnblogs.com/scx2015noip-as-php/p/noip2018.html