UOJ Logo WrongAnswer的博客

博客

APIO2016酱油记

2016-05-09 17:48:41 By WrongAnswer

一直听说APIO是个神奇的比赛【以前似乎有CTSC Au的神犇挂APIO?】于是更加紧张了233

事实证明我实力还是不足最后200都没上

——————————

5月5日。

APIO前有个练习赛,在网上进行。练习赛有两道题,一道是交互题network,一道是传统题sequence。

今年APIO有交互题!然而我交互题巨弱无比怎么办?

其他同学都A了一题我才登进网站去做- -第一题network看起来似乎挺可做的?

第一题network,题目给一个无向无权图 $G=(V,E)$ 以及两点 $s,t\in V$,要求给出从 $s$ 到 $t$ 的任意一条最短路,其中可以调用 ping(i, j) 询问 $i$ 到 $j$ 的最短路长度。不管先敲了个 $O(n^2)$ 的大暴力再说,25分……一看怎么里面的点有的AC有的WA?

子任务制就是好(sang)啊!可以在一个子任务里塞一大堆点,然后卡各种方面的细节,只要有一点小问题就可以卡到0分。

后来强行优化并逐个通过了这些子任务(一共交了4次)。这题被大神犇 @lightning 吐槽为大水题(@lightning:原来是这么水的APIO!@immortalCO:XXX嫌APIO题水啊!后来@lightning在APIO的时候真的A了交互题,巨强)

第二题sequence是个算(xi)法(jie)好(keng)题,给一个长度为 $K$ 的十进制数字序列 $a_0,a_1,...,a_{K-1}$ ,求最小的 $N$ 使得对任意整数 $0\le i< K$,$N+i$ 的十进制表示包含数字 $a_i$。

这题 @immortalCO、@y0rkl1u、@dick32165401 等大神交流了一段时间以后都想出了AC做法,就我还傻呆呆地不会。

一开始完全没思路。想了很久发现问题具有递归性质?枚举 $N$ 的个位就可以得到一个规模为原来 $\frac{1}{10}$ 的子问题,问题缩小到 $K\le 2$ 就可以贪心了。但是细节很多,要判0什么的,推导了很久,最后还WA了一发因为预处理 $10^i$ 没处理满第二次才AC。【那时候是5月5日22点,第二天练习赛就关闭了,还好我及时

另外APIO能多次提交确实是个好东西不然就爆0了

然后刷了点别的题练手,@immortalCO把UR10的世界线A了,而我一直调不出来了,完蛋了我交互题真的要狗带了

——————————

5月6日。

第一天培训。讲的比我想象中的有意思。

上午先讲的是提交答案题的相关解法,讲题人为了避免大神觉得东西太无聊就放了一道题《坦克大战》让大家玩(反正我没玩……我比较弱);然后讲启发式搜索,都是些非常神奇的智能化技巧,我能写的估计只有爬山了

下午是密码学,从此再也不敢以为密码学简单。NOIP2012的vigenere密码我都不会破解。其实我更感兴趣的是利用NP问题构造单向函数。

都好高大上啊!

明天的比赛,压力大,很大。要是部分分少就真的要Ag或Cu或Fe挂了。脑子一片空白,没心思想题去睡觉了。

——————————

5月7日。

8:30进场准备比赛。然后一直等到9:00开始等得我好着急……

8:50。

8:51。

8:52。

……

8:59。

终于可以开始做题了。

三道题:boat,fireworks,gap。

第一题boat一看觉得应该并不难,就是有$n$个区间,第$i$个区间$[a_i,b_i]$,求有多少个序列$x_1,x_2,...,x_n$满足对任意$i$,$x_i=0$或$a_i\le x_i\le b_i$,且将序列所有0去掉后是严格递增的。

于是准备先把这题干掉。

如果$a_i$和$b_i$范围小,可以直接DP递推,设$f(i,j)$为序列$(x_1,x_2,...,x_i)$满足条件且$x_i\le j$的方案数,递推式就不想了。因为这题$a_i$和$b_i$是$10^9$级别。

离散化!

向来喜欢处理半开半闭区间,把区间全改成了$[a_i,b_i+1)$,然后把端点$a_i,b_i+1$全部拿去排序离散化了。

接着还是$f(i,j)$表示序列$(x_1,x_2,...,x_i)$满足条件且$x_i\le j$的方案数,不过这时候$j$是离散化后的第$j$个数$\mathrm{num}_j$。

递推式……那就按块考虑吧,$x_i\in[\mathrm{num}_{j-1},\mathrm{num}_j)$,那就枚举之前第一个不在这个块内的数也就是最大的$k$使$x_k<\mathrm{num}_{j-1}$,然后$(k,i]$内有的$x$是0有的不是0,枚举有多少个不是0(设有$s$个),然后变成了类似这样的不等式:$0\le X_1 < X_2 < ...< X_s < M$,其中 $M=\mathrm{num}_j-\mathrm{num}_{j-1}$。这就是组合数$C_M^s$。

预处理一下组合数就做完了?

式子推完开始写代码,很快写好过样例,一交:9分!

这是什么鬼?哪里WA了?

发现有个地方手抖打错,改完再交:0分。又改了几个疑似的错误,再交,还是0分。什么鬼!!!

没办法,只好对拍了。居然 $n=2$ 都拍出错了。

然后才知道很神经地好几个地方变量都打错了。改完以后对拍不WA了。交上去,就貌似58分的样子了。

最后一个子任务TLE了一点点。

我想大概优化一下就能过掉了。于是加了几个预处理进去,交。

100分!

大点跑了0.75s左右吧,是卡常数卡过去的。自古APIO第一题卡常数?就这样在1个小时左右的时间里过掉了最简单的一题。

后面的过程相当不顺利。

看了第二题fireworks,给一个边权为正的有根树,每次可以把一条边的边权加1或减1,用最少的操作次数使从根到叶子的所有路径长度相等。

心想应该是个树形DP?似乎可以推出来?

再看了下第三题gap,有一个序列$a$,每次可以问一段区间内的最值,求$a_i-a_{i-1}$的最大值。天哪简直不可做。

想了想决定先搞第二题。事实证明我的决策是错误的。

和第一题一样权值也是$10^9$级别的,在想能不能离散化,但并没想出怎么离散化,似乎不可行。

绝对值函数应该就是个分段一次函数,那么能不能在节点处维护分段一次函数?

于是有了个大致的思路,推了下式子。觉得挺难推,和分段函数的最值有关,所以花了挺久时间。

感觉差不多的时候,发现这个做法挂了。因为题目有个条件:需保证边权非负。

而我的做法根本不能保证!

想通过对算法稍加修改来解决这个问题,但无济于事。因为如果要这样维护下去非常难写,而且还不能A。

等到这个时候我再去看第三题,才发现呵呵了,我没注意到序列是严格递增的!

然后开始想怎么做。30分很好搞,第$1$次询问$[0,10^{18}]$,得到答案$S_1,T_1$,第$i$($i>1$)次询问$[S_{i-1}+1,T_{i-1}-1]$,得到答案$S_i,T_i$,最后搞出来的就是序列$S_1,S_2,...,S_\frac{N+1}{2},T_\frac{N+1}{2},T_{\frac{N+1}{2}-1},...,T_1$。

剩下70分感觉相当不可做,瞎搞了下搞了14。

于是这题分数就是44。

滚回去搞第二题的暴力,7分只要取中位数就行,另外19分可以暴力树形DP。写完交了一发,26分到手。

接着担心第二题大家都会做,就继续狂想,但并没有想出来。

最后一个小时。

此时分数170,想到去年分数线都200+了,似乎要Ag滚粗了。

还是去搞第三题吧。

然后有了点思路,就是把序列分块询问,不过由于并没有想清楚,导致最后结果没有保证。准备交的时候评测机卡住了,坑爹。

工作人员说现在暂时不要交。看来没法多次提交看结果了。

然后由于我本地调试交互题能力太差,不怎么会调,最后选择弃疗。

最后一小时是以????的状态度过的。

结束了。100+26+44=170。

后4个小时的分数还没第1个小时高,200分都不到,只有可怜的170分。

感觉要被神犇怒虐了。

出来以后问了下情况,@lightning A了第3题,果然是秒交互题的大神。@immortalCO 虽然第3题没做出来,不过还是得了66左右的分数,反正都比我44分高就是了。

非常虚。

——————————

5月8日。

上午讲物理引擎,好像很高深的样子,不过挺有趣的,还可以手玩游戏。(然后顿时感到自己的代码能力真是弱得不行)

下午讲线段树以及一些黑科技(比如位运算生成树),似乎很神奇,回去写写看?

晚上颁奖会。担心自己能不能Au。还好最后分数线没我想象的高,150分Au。

然而排名相当靠后……被众人虐的节奏……

第1题有40人AC,是所有题目中AC人数最多的题。

要是A完第一题专心搞第3题就能226分了我为何如此SB就这样被众多大神踩了。【我并没有估计一道题的难度的能力233

实力弱,只会做水题,考场没有好的决策。要是再这样下去NOI就要被踩了。

回家了。继续训练。

评论

absi2011
话说你有没有发现APIO不能"提交"而只能"提价"啊.... 当然用英语操作界面的..我只好Orz咯

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。