CODE FESTIVAL 2016 Qualification Round B
非常难得这次做出四道题(A和B已经无法更水了)。大中午的特别困,中间睡了一个小时,之后把C和D搞出来了。E题的这个Trie很赞。。。
C - Gr-idian MST
题意是给出了$W \times H$的格子,然后每个格子之间都有一个相互连接的代价,格子$(i,j)$到格子$(i+1,j)$对于任意的$j$代价均为$p_i$,格子$(i,j)$到格子$(i,j+1)$对于任意的$i$代价均为$q_j$。问最终把格子连接成为一个整体需要的最小代价。
一开始往并查集那里去考虑,发现数量级有一些大啊。。。之后找规律,不断找最小值,然后如果是x方向的,那么下一次y就少了1。如果是y方向的,下一次x就少了1。
D - Greedy customers
题意是有$N$个顾客站成一排,每个顾客手里有$A_i$元钱,现在由你出价,从顾客1开始,如果出的价钱小于等于他手里的钱,那么他会买走你的物品。题目要求最后每个顾客手里的钱不能为0,问最多能够卖多少物品。
在比赛结束一分钟之前,情况考虑得都不是很周全,慌乱中自己提交,竟然还过了。。。后来发现情况确实考虑得不好,只能说幸运。
首先肯定是可以将卖的价钱最终变成一个升序的数列,而又不影响最终的买卖情况的。
那就考虑从价钱1开始,卖给第一个用户,将其剩下1块。价钱$x$就从2开始,对于可以整除$x$的钱$N$,可以卖出去$N/x-1$件物品,而$x$不需要+1,因为最后一件可以卖成$x+1$,使得该位置剩下的钱小于$x$元。而如果遇到$val[i]=x$这种情况,那没办法了,$x$只能加1。
E - Lexicographical disorder
题意是给出了$N$个字符串,$Q$个询问$k_i, p$,每一个询问是算第$k_i$个字符串,在该字典序中所排列的位置。
建立Trie树,记录每一个位置的值,查询的时候算每一个字符串在同一个位置上其他字符的数量,以及结束字符的数量。解法真的很亮。。。