SRM 518 解题报告
这是一篇后来补上的报告,比赛没参加,没有故事好讲。
250pt: 定义将一个串删除一些字母后得到的串为其子串,问给定一个串,求其所有的子串中的最大字典序子串。比如test的最大字典序子串为tt。
由于是求字典序最大的子串,第一个字母肯定是该串中所有字母中最大的那个。然后在剩下的子串里,继续求最大字典序子串。就是这么个一路贪心下去的算法。
500pt: 有一个序列x0,x2…xn-1,如果满足对所有的1<=i<=n-2,有x[i-1]+x[i+1]>=2*x[i],则称这个序列是凸的。现在给定一个序列a,可以用一个操作使a[i]--,问一共需要多少可操作才能把序列a变成一个凸序列?
观察这个序列,如果把相邻点之间的差值算出来,这个差值的序列肯定是一路递增的(可以相等)。然后可以发现这样的序列肯定会有一个最低点,然后把最低点和其他所有点连线,这个连线不能和原来的函数曲线有交点。也就是说,如果把这个序列的任意两点连起来,在这两点中间的所有点,必须低于这两点的连线。于是就有了一个很暴力的解法,枚举所有的非相邻点对,检验两点间的所有点是不是高过这两点的连线,如果有就裁掉。重复以上过程一直到没有点被裁掉为止。